// Type definitions for ArcGIS API for JavaScript 4.12
// Project: http://js.arcgis.com
// Definitions by: Esri <https://github.com/Esri>
//                 Bjorn Svensson <https://github.com/bsvensson>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.7

interface HashMap<T = any> {
  [index: string]: T;
}

interface IPromiseLike<T = any> {
  then<TResult1 = T, TResult2 = never>(
    onfulfilled?: ((value: T) => TResult1 | IPromiseLike<TResult1>) | undefined | null,
    onrejected?: ((reason: any) => TResult2 | IPromiseLike<TResult2>) | undefined | null
  ): IPromiseLike<TResult1 | TResult2>;
}

interface IPromise<T = any> {
  always<TResult1 = T>(
    callback?: ((valueOrError: T | any) => TResult1 | IPromiseLike<TResult1>) | undefined | null
  ): IPromise<TResult1>;
  cancel?<U>(reason?: U, strict?: boolean): U;
  catch<TResult = never>(
    onrejected?: ((reason: any) => TResult | IPromiseLike<TResult>) | undefined | null
  ): IPromise<T | TResult>;
  isCanceled?(): boolean;
  isFulfilled(): boolean;
  isRejected(): boolean;
  isResolved(): boolean;
  otherwise<TResult = never>(
    onrejected?: ((reason: any) => TResult | IPromiseLike<TResult>) | undefined | null
  ): IPromise<T | TResult>;
  then<TResult1 = T, TResult2 = never>(
    onfulfilled?: ((value: T) => TResult1 | IPromiseLike<TResult1>) | undefined | null,
    onrejected?: ((reason: any) => TResult2 | IPromiseLike<TResult2>) | undefined | null
  ): IPromise<TResult1 | TResult2>;
}

interface IHandle {
  remove(): void;
}

declare namespace JSX {
  interface IntrinsicElements {
    [elementName: string]: any;
  }

  interface Element {}
}

declare namespace __esri {
  export class Accessor {
    constructor(obj?: any);

    destroyed: boolean;
    initialized: boolean;
    declaredClass: string;
    destroy(): void;

    get<T>(propertyName: string): T;
    get(propertyName: string): any;
    set<T>(propertyName: string, value: T): this;
    set(props: HashMap<any>): this;
    watch(path: string | string[], callback: WatchCallback, sync?: boolean): WatchHandle;

    protected notifyChange(propertyName: string): void;
    protected _get(propertyName: string): any;
    protected _get<T>(propertyName: string): T;
    protected _set<T>(propertyName: string, value: T): this;
  }

  export interface AnonymousAccessor extends Object {
    get?<T>(propertyName: string): T;
    get?(propertyName: string): any;
    set?<T>(propertyName: string, value: T): this;
    set?(props: HashMap<any>): this;
    watch?(path: string | string[], callback: WatchCallback, sync?: boolean): WatchHandle;
  }

  export type ItemCallback<T> = (item: T, index: number) => void;

  export type ItemCompareCallback<T> = (firstItem: T, secondItem: T) => number;

  export type ItemMapCallback<T, R> = (item: T, index: number) => R;

  export type ItemReduceCallback<T, R> = (previousValue: R, currentValue: T, index: number) => R;

  export type ItemTestCallback<T> = (item: T, index: number) => boolean;

  export type CollectionAfterAddEventHandler<T> = (event: CollectionAfterEvent<T>) => void;

  export type CollectionAfterChangesEventHandler<T> = (event: CollectionAfterChangesEvent<T>) => void;

  export type CollectionAfterRemoveEventHandler<T> = (event: CollectionAfterEvent<T>) => void;

  export type CollectionChangeEventHandler<T> = (event: CollectionChangeEvent<T>) => void;

  export type CollectionBeforeAddEventHandler<T> = (event: CollectionBeforeEvent<T>) => void;

  export type CollectionBeforeChangesEventHandler<T> = (event: CollectionBeforeEvent<T>) => void;

  export type CollectionBeforeRemoveEventHandler<T> = (event: CollectionBeforeEvent<T>) => void;

  export interface CollectionAfterEvent<T = any> {
    item: T;
  }

  export interface CollectionAfterChangesEvent<T = any> {}

  export interface CollectionBeforeEvent<T = any> {
    item: T;
    preventDefault(): void;
  }

  export interface CollectionChangeEvent<T = any> {
    added: T[];
    removed: T[];
    moved: T[];
  }

  interface Collection<T = any> extends Evented {
    on(type: "after-add", listener: CollectionAfterAddEventHandler<T>): IHandle;
    on(type: "after-changes", listener: CollectionAfterChangesEventHandler<T>): IHandle;
    on(type: "after-remove", listener: CollectionAfterRemoveEventHandler<T>): IHandle;
    on(type: "before-add", listener: CollectionBeforeAddEventHandler<T>): IHandle;
    on(type: "before-changes", listener: CollectionBeforeChangesEventHandler<T>): IHandle;
    on(type: "before-remove", listener: CollectionBeforeRemoveEventHandler<T>): IHandle;
    on(type: "change", listener: CollectionChangeEventHandler<T>): IHandle;
    on(type: string, listener: (event: any) => void): IHandle;
  }

  type Constructor<T> = new (...params: any[]) => T;

  interface Types<T extends Base, Base = T> {
    key: string | ((obj: any) => string);
    base: Constructor<Base> | Function;
    typeMap: HashMap<Constructor<T>>;
  }

  export class Collection<T = any> extends Accessor {
    constructor(values?: any[] | Collection<any>);

    readonly length: number;

    add(item: T, index?: number): void;
    addMany(items: T[] | Collection<T>, index?: number): void;
    clone(): Collection<T>;
    concat(value: T[] | Collection<T>): Collection<T>;
    every(callback: ItemTestCallback<T>): boolean;
    filter(callback: ItemTestCallback<T>): Collection<T>;
    find(callback: ItemTestCallback<T>): T;
    findIndex(callback: ItemTestCallback<T>): number;
    flatten(callback: ItemCallback<T>): Collection<T>;
    forEach(callback: ItemCallback<T>): void;
    getItemAt(index: number): T;
    includes(searchElement: T): boolean;
    indexOf(searchElement: T, fromIndex?: number): number;
    join(separator?: string): string;
    lastIndexOf(searchElement: T, fromIndex?: number): number;
    map<R = T>(callback: ItemMapCallback<T, R>): Collection<R>;
    pop(): T;
    push(item: T): number;
    reduce<R = T>(callback: ItemReduceCallback<T, R>, initialValue?: R): R;
    reduceRight<R = T>(callback: ItemReduceCallback<T, R>, initialValue?: R): R;
    remove(item: T): void;
    removeAll(): void;
    removeAt(index: number): any;
    removeMany(items: T[] | Collection<T>): T[];
    reorder(item: T, index: number): T;
    reverse(): Collection<T>;
    shift(): T;
    slice(begin?: number, end?: number): Collection<T>;
    some(callback: ItemCallback<T>): boolean;
    sort(compareFunction?: ItemCompareCallback<T>): void;
    splice(start: number, deleteCount: number, ...items: T[]): T[];
    toArray(): T[];
    unshift(...items: T[]): number;

    static isCollection<T = any>(value: any | Collection<T>): value is Collection<T>;

    static ofType<T extends Base, Base = T>(
      type: Constructor<T> | Types<T, Base>
    ): new (items?: (T[] | Collection<T>) | { items?: T[] | Collection<T> }) => Collection<T>;
  }

  type CollectionProperties<T = any> = T[] | Collection<T>;

  type DateProperties = number | string | Date;

  export type BaseDynamicLayerLayerviewCreateErrorEventHandler = (
    event: BaseDynamicLayerLayerviewCreateErrorEvent
  ) => void;

  export type BaseDynamicLayerLayerviewCreateEventHandler = (event: BaseDynamicLayerLayerviewCreateEvent) => void;

  export type BaseDynamicLayerLayerviewDestroyEventHandler = (event: BaseDynamicLayerLayerviewDestroyEvent) => void;

  export type BaseElevationLayerLayerviewCreateErrorEventHandler = (
    event: BaseElevationLayerLayerviewCreateErrorEvent
  ) => void;

  export type BaseElevationLayerLayerviewCreateEventHandler = (event: BaseElevationLayerLayerviewCreateEvent) => void;

  export type BaseElevationLayerLayerviewDestroyEventHandler = (event: BaseElevationLayerLayerviewDestroyEvent) => void;

  export type BaseTileLayerLayerviewCreateErrorEventHandler = (event: BaseTileLayerLayerviewCreateErrorEvent) => void;

  export type BaseTileLayerLayerviewCreateEventHandler = (event: BaseTileLayerLayerviewCreateEvent) => void;

  export type BaseTileLayerLayerviewDestroyEventHandler = (event: BaseTileLayerLayerviewDestroyEvent) => void;

  export type BingMapsLayerLayerviewCreateErrorEventHandler = (event: BingMapsLayerLayerviewCreateErrorEvent) => void;

  export type BingMapsLayerLayerviewCreateEventHandler = (event: BingMapsLayerLayerviewCreateEvent) => void;

  export type BingMapsLayerLayerviewDestroyEventHandler = (event: BingMapsLayerLayerviewDestroyEvent) => void;

  export type BuildingSceneLayerLayerviewCreateErrorEventHandler = (
    event: BuildingSceneLayerLayerviewCreateErrorEvent
  ) => void;

  export type BuildingSceneLayerLayerviewCreateEventHandler = (event: BuildingSceneLayerLayerviewCreateEvent) => void;

  export type BuildingSceneLayerLayerviewDestroyEventHandler = (event: BuildingSceneLayerLayerviewDestroyEvent) => void;

  export type ClassedColorSliderMaxChangeEventHandler = (event: ClassedColorSliderMaxChangeEvent) => void;

  export type ClassedColorSliderMinChangeEventHandler = (event: ClassedColorSliderMinChangeEvent) => void;

  export type ClassedColorSliderThumbChangeEventHandler = (event: ClassedColorSliderThumbChangeEvent) => void;

  export type ClassedColorSliderThumbDragEventHandler = (event: ClassedColorSliderThumbDragEvent) => void;

  export type ClassedColorSliderViewModelMaxChangeEventHandler = (
    event: ClassedColorSliderViewModelMaxChangeEvent
  ) => void;

  export type ClassedColorSliderViewModelMinChangeEventHandler = (
    event: ClassedColorSliderViewModelMinChangeEvent
  ) => void;

  export type ClassedColorSliderViewModelValueChangeEventHandler = (
    event: ClassedColorSliderViewModelValueChangeEvent
  ) => void;

  export type ClassedSizeSliderMaxChangeEventHandler = (event: ClassedSizeSliderMaxChangeEvent) => void;

  export type ClassedSizeSliderMinChangeEventHandler = (event: ClassedSizeSliderMinChangeEvent) => void;

  export type ClassedSizeSliderThumbChangeEventHandler = (event: ClassedSizeSliderThumbChangeEvent) => void;

  export type ClassedSizeSliderThumbDragEventHandler = (event: ClassedSizeSliderThumbDragEvent) => void;

  export type ClassedSizeSliderViewModelMaxChangeEventHandler = (
    event: ClassedSizeSliderViewModelMaxChangeEvent
  ) => void;

  export type ClassedSizeSliderViewModelMinChangeEventHandler = (
    event: ClassedSizeSliderViewModelMinChangeEvent
  ) => void;

  export type ClassedSizeSliderViewModelValueChangeEventHandler = (
    event: ClassedSizeSliderViewModelValueChangeEvent
  ) => void;

  export type ColorSizeSliderMaxChangeEventHandler = (event: ColorSizeSliderMaxChangeEvent) => void;

  export type ColorSizeSliderMinChangeEventHandler = (event: ColorSizeSliderMinChangeEvent) => void;

  export type ColorSizeSliderThumbChangeEventHandler = (event: ColorSizeSliderThumbChangeEvent) => void;

  export type ColorSizeSliderThumbDragEventHandler = (event: ColorSizeSliderThumbDragEvent) => void;

  export type ColorSizeSliderViewModelMaxChangeEventHandler = (event: ColorSizeSliderViewModelMaxChangeEvent) => void;

  export type ColorSizeSliderViewModelMinChangeEventHandler = (event: ColorSizeSliderViewModelMinChangeEvent) => void;

  export type ColorSizeSliderViewModelValueChangeEventHandler = (
    event: ColorSizeSliderViewModelValueChangeEvent
  ) => void;

  export type ColorSliderMaxChangeEventHandler = (event: ColorSliderMaxChangeEvent) => void;

  export type ColorSliderMinChangeEventHandler = (event: ColorSliderMinChangeEvent) => void;

  export type ColorSliderThumbChangeEventHandler = (event: ColorSliderThumbChangeEvent) => void;

  export type ColorSliderThumbDragEventHandler = (event: ColorSliderThumbDragEvent) => void;

  export type ColorSliderViewModelMaxChangeEventHandler = (event: ColorSliderViewModelMaxChangeEvent) => void;

  export type ColorSliderViewModelMinChangeEventHandler = (event: ColorSliderViewModelMinChangeEvent) => void;

  export type ColorSliderViewModelValueChangeEventHandler = (event: ColorSliderViewModelValueChangeEvent) => void;

  export type CredentialDestroyEventHandler = (event: CredentialDestroyEvent) => void;

  export type CredentialTokenChangeEventHandler = (event: CredentialTokenChangeEvent) => void;

  export type CSVLayerLayerviewCreateErrorEventHandler = (event: CSVLayerLayerviewCreateErrorEvent) => void;

  export type CSVLayerLayerviewCreateEventHandler = (event: CSVLayerLayerviewCreateEvent) => void;

  export type CSVLayerLayerviewDestroyEventHandler = (event: CSVLayerLayerviewDestroyEvent) => void;

  export type ElevationLayerLayerviewCreateErrorEventHandler = (event: ElevationLayerLayerviewCreateErrorEvent) => void;

  export type ElevationLayerLayerviewCreateEventHandler = (event: ElevationLayerLayerviewCreateEvent) => void;

  export type ElevationLayerLayerviewDestroyEventHandler = (event: ElevationLayerLayerviewDestroyEvent) => void;

  export type ElevationSamplerChangedEventHandler = (event: ElevationSamplerChangedEvent) => void;

  export type FeatureLayerLayerviewCreateErrorEventHandler = (event: FeatureLayerLayerviewCreateErrorEvent) => void;

  export type FeatureLayerLayerviewCreateEventHandler = (event: FeatureLayerLayerviewCreateEvent) => void;

  export type FeatureLayerLayerviewDestroyEventHandler = (event: FeatureLayerLayerviewDestroyEvent) => void;

  export type GeoJSONLayerLayerviewCreateErrorEventHandler = (event: GeoJSONLayerLayerviewCreateErrorEvent) => void;

  export type GeoJSONLayerLayerviewCreateEventHandler = (event: GeoJSONLayerLayerviewCreateEvent) => void;

  export type GeoJSONLayerLayerviewDestroyEventHandler = (event: GeoJSONLayerLayerviewDestroyEvent) => void;

  export type GeoRSSLayerLayerviewCreateErrorEventHandler = (event: GeoRSSLayerLayerviewCreateErrorEvent) => void;

  export type GeoRSSLayerLayerviewCreateEventHandler = (event: GeoRSSLayerLayerviewCreateEvent) => void;

  export type GeoRSSLayerLayerviewDestroyEventHandler = (event: GeoRSSLayerLayerviewDestroyEvent) => void;

  export type GraphicsLayerLayerviewCreateErrorEventHandler = (event: GraphicsLayerLayerviewCreateErrorEvent) => void;

  export type GraphicsLayerLayerviewCreateEventHandler = (event: GraphicsLayerLayerviewCreateEvent) => void;

  export type GraphicsLayerLayerviewDestroyEventHandler = (event: GraphicsLayerLayerviewDestroyEvent) => void;

  export type GroupLayerLayerviewCreateErrorEventHandler = (event: GroupLayerLayerviewCreateErrorEvent) => void;

  export type GroupLayerLayerviewCreateEventHandler = (event: GroupLayerLayerviewCreateEvent) => void;

  export type GroupLayerLayerviewDestroyEventHandler = (event: GroupLayerLayerviewDestroyEvent) => void;

  export type HeatmapSliderViewModelMaxChangeEventHandler = (event: HeatmapSliderViewModelMaxChangeEvent) => void;

  export type HeatmapSliderViewModelMinChangeEventHandler = (event: HeatmapSliderViewModelMinChangeEvent) => void;

  export type HeatmapSliderViewModelValueChangeEventHandler = (event: HeatmapSliderViewModelValueChangeEvent) => void;

  export type HistogramRangeSliderViewModelMaxChangeEventHandler = (
    event: HistogramRangeSliderViewModelMaxChangeEvent
  ) => void;

  export type HistogramRangeSliderViewModelMinChangeEventHandler = (
    event: HistogramRangeSliderViewModelMinChangeEvent
  ) => void;

  export type HistogramRangeSliderViewModelValueChangeEventHandler = (
    event: HistogramRangeSliderViewModelValueChangeEvent
  ) => void;

  export type ImageryLayerLayerviewCreateErrorEventHandler = (event: ImageryLayerLayerviewCreateErrorEvent) => void;

  export type ImageryLayerLayerviewCreateEventHandler = (event: ImageryLayerLayerviewCreateEvent) => void;

  export type ImageryLayerLayerviewDestroyEventHandler = (event: ImageryLayerLayerviewDestroyEvent) => void;

  export type IntegratedMeshLayerLayerviewCreateErrorEventHandler = (
    event: IntegratedMeshLayerLayerviewCreateErrorEvent
  ) => void;

  export type IntegratedMeshLayerLayerviewCreateEventHandler = (event: IntegratedMeshLayerLayerviewCreateEvent) => void;

  export type IntegratedMeshLayerLayerviewDestroyEventHandler = (
    event: IntegratedMeshLayerLayerviewDestroyEvent
  ) => void;

  export type KMLLayerLayerviewCreateErrorEventHandler = (event: KMLLayerLayerviewCreateErrorEvent) => void;

  export type KMLLayerLayerviewCreateEventHandler = (event: KMLLayerLayerviewCreateEvent) => void;

  export type KMLLayerLayerviewDestroyEventHandler = (event: KMLLayerLayerviewDestroyEvent) => void;

  export type MapImageLayerLayerviewCreateErrorEventHandler = (event: MapImageLayerLayerviewCreateErrorEvent) => void;

  export type MapImageLayerLayerviewCreateEventHandler = (event: MapImageLayerLayerviewCreateEvent) => void;

  export type MapImageLayerLayerviewDestroyEventHandler = (event: MapImageLayerLayerviewDestroyEvent) => void;

  export type MapNotesLayerLayerviewCreateErrorEventHandler = (event: MapNotesLayerLayerviewCreateErrorEvent) => void;

  export type MapNotesLayerLayerviewCreateEventHandler = (event: MapNotesLayerLayerviewCreateEvent) => void;

  export type MapNotesLayerLayerviewDestroyEventHandler = (event: MapNotesLayerLayerviewDestroyEvent) => void;

  export type MapViewBlurEventHandler = (event: MapViewBlurEvent) => void;

  export type MapViewClickEventHandler = (event: MapViewClickEvent) => void;

  export type MapViewDoubleClickEventHandler = (event: MapViewDoubleClickEvent) => void;

  export type MapViewDragEventHandler = (event: MapViewDragEvent) => void;

  export type MapViewFocusEventHandler = (event: MapViewFocusEvent) => void;

  export type MapViewHoldEventHandler = (event: MapViewHoldEvent) => void;

  export type MapViewImmediateClickEventHandler = (event: MapViewImmediateClickEvent) => void;

  export type MapViewKeyDownEventHandler = (event: MapViewKeyDownEvent) => void;

  export type MapViewKeyUpEventHandler = (event: MapViewKeyUpEvent) => void;

  export type MapViewLayerviewCreateErrorEventHandler = (event: MapViewLayerviewCreateErrorEvent) => void;

  export type MapViewLayerviewCreateEventHandler = (event: MapViewLayerviewCreateEvent) => void;

  export type MapViewLayerviewDestroyEventHandler = (event: MapViewLayerviewDestroyEvent) => void;

  export type MapViewMouseWheelEventHandler = (event: MapViewMouseWheelEvent) => void;

  export type MapViewPointerDownEventHandler = (event: MapViewPointerDownEvent) => void;

  export type MapViewPointerEnterEventHandler = (event: MapViewPointerEnterEvent) => void;

  export type MapViewPointerLeaveEventHandler = (event: MapViewPointerLeaveEvent) => void;

  export type MapViewPointerMoveEventHandler = (event: MapViewPointerMoveEvent) => void;

  export type MapViewPointerUpEventHandler = (event: MapViewPointerUpEvent) => void;

  export type MapViewResizeEventHandler = (event: MapViewResizeEvent) => void;

  interface Basemap extends Accessor, Loadable, JSONSupport {
    /**
     * A collection of tile layers that make up the basemap's features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#baseLayers)
     */
    baseLayers: Collection<Layer>;
    /**
     * An identifier used to refer to the basemap when referencing it elsewhere.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#id)
     */
    id: string;
    /**
     * Indicates whether the basemap instance has loaded. When `true`,all the properties of the object can be accessed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#loaded)
     *
     * @default false
     */
    readonly loaded: boolean;
    /**
     * The portal item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#portalItem)
     */
    portalItem: PortalItem;
    /**
     * A collection of tiled reference layers for displaying labels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#referenceLayers)
     */
    referenceLayers: Collection<Layer>;
    /**
     * The URL pointing to an image that represents the basemap. When using a custombasemap in the [BasemapToggle](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html) widget, the imagespecified here will display in the widget. When the user clicks the image,the map's basemap will update to the basemap associated with the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#thumbnailUrl)
     */
    thumbnailUrl: string;
    /**
     * The title of the basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#title)
     */
    title: string;

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#clone)
     *
     *
     */
    clone(): Basemap;
    /**
     * Loads all the externally loadable resources associated with the basemap.For the basemap this will load all the base layers and reference layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#loadAll)
     *
     *
     */
    loadAll(): IPromise<Basemap>;
  }

  interface BasemapConstructor {
    new (properties?: BasemapProperties): Basemap;

    /**
     * Creates a new basemap instance from a [well known basemap ID](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap).See [Map.basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) for a list of possible values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#fromId)
     *
     * @param id The basemap ID.
     *
     */
    fromId(id: string): Basemap;

    fromJSON(json: any): Basemap;
  }

  export const Basemap: BasemapConstructor;

  interface BasemapProperties extends LoadableProperties {
    /**
     * A collection of tile layers that make up the basemap's features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#baseLayers)
     */
    baseLayers?: CollectionProperties<LayerProperties>;
    /**
     * An identifier used to refer to the basemap when referencing it elsewhere.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#id)
     */
    id?: string;
    /**
     * The portal item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#portalItem)
     */
    portalItem?: PortalItemProperties;
    /**
     * A collection of tiled reference layers for displaying labels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#referenceLayers)
     */
    referenceLayers?: CollectionProperties<LayerProperties>;
    /**
     * The URL pointing to an image that represents the basemap. When using a custombasemap in the [BasemapToggle](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html) widget, the imagespecified here will display in the widget. When the user clicks the image,the map's basemap will update to the basemap associated with the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#thumbnailUrl)
     */
    thumbnailUrl?: string;
    /**
     * The title of the basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#title)
     */
    title?: string;
  }

  interface Camera extends Accessor, JSONSupport {
    /**
     * The field of view of the camera in degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#fov)
     *
     * @default 55
     */
    fov: number;
    /**
     * The compass heading of the camera in degrees. Headingis zero when north is the top of the screen. It increases as the view rotatesclockwise. The angles are always normalized between 0 and 360 degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#heading)
     *
     * @default 0
     */
    heading: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#position)
     */
    position: Point;
    /**
     * The tilt of the camera in degrees with respect to the surface as projecteddown from the camera position. Tilt is zero when looking straight downat the surface and 90 degrees when the camera is looking parallel tothe surface.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#tilt)
     *
     * @default 0
     */
    tilt: number;

    /**
     * Creates a deep clone of the camera object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#clone)
     *
     *
     */
    clone(): Camera;
  }

  interface CameraConstructor {
    new (properties?: CameraProperties): Camera;

    fromJSON(json: any): Camera;
  }

  export const Camera: CameraConstructor;

  interface CameraProperties {
    /**
     * The field of view of the camera in degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#fov)
     *
     * @default 55
     */
    fov?: number;
    /**
     * The compass heading of the camera in degrees. Headingis zero when north is the top of the screen. It increases as the view rotatesclockwise. The angles are always normalized between 0 and 360 degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#heading)
     *
     * @default 0
     */
    heading?: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#position)
     */
    position?: PointProperties;
    /**
     * The tilt of the camera in degrees with respect to the surface as projecteddown from the camera position. Tilt is zero when looking straight downat the surface and 90 degrees when the camera is looking parallel tothe surface.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#tilt)
     *
     * @default 0
     */
    tilt?: number;
  }

  interface Color {
    /**
     * The alpha value. This value can be any number between `0` and `1` and represents the opacity of the Color.`0` indicates the color is fully transparent and `1` indicates it is fully opaque.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#a)
     */
    a: number;
    /**
     * The blue value. This value can range between `0` and `255`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#b)
     */
    b: number;
    /**
     * The green value. This value can range between `0` and `255`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#g)
     */
    g: number;
    /**
     * The red value. This value can range between `0` and `255`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#r)
     */
    r: number;

    /**
     * Creates a deep clone of the Color instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#clone)
     *
     *
     */
    clone(): Color;
    /**
     * Takes an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) objectand sets this color instance to the input value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#setColor)
     *
     * @param color The new color value. This parameter can be a string                                          representing a named color or a hex value; an array of three                                          or four numbers representing r, g, b, a values; or an object                                          with r, g, b, a properties.
     *
     */
    setColor(color: string | number[] | any): Color;
    /**
     * Returns a CSS color string in rgba form representing the Color instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#toCss)
     *
     * @param includeAlpha If `true`, the alpha value will be included in the result.
     *
     */
    toCss(includeAlpha?: boolean): string;
    /**
     * Returns a CSS color string in hexadecimal form that represents the Color instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#toHex)
     *
     *
     */
    toHex(): string;
    /**
     * Returns a JSON object with all the values from a Color instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#toJSON)
     *
     *
     */
    toJSON(): any;
    /**
     * Returns a 3-component array of rgb values that represent the Color instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#toRgb)
     *
     *
     */
    toRgb(): number[];
    /**
     * Returns a 4-component array of rgba values that represent the Color instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#toRgba)
     *
     *
     */
    toRgba(): number[];
  }

  interface ColorConstructor {
    /**
     * Creates a Color instance by blending two colors using a weight factor. Optionally acceptsa Color object to update and return instead of creating a new object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#blendColors)
     *
     * @param start The start color.
     * @param end The end color.
     * @param weight The weight value is a number from 0 to 1, with 0.5 being a 50/50 blend.
     * @param out A previously allocated Color object to reuse for the result.
     *
     */
    blendColors(start: Color, end: Color, weight: number, out?: Color): Color;

    new (color: string | number[] | any): Color;
    /**
     * Creates a Color instance using a 3 or 4 element array, mapping each element in sequence tothe rgb(a) values of the color. Optionally accepts a Color object to update with the colorvalue and return instead of creating a new object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#fromArray)
     *
     * @param a The input array.
     * @param obj A previously allocated Color object to reuse for the result.
     *
     */
    fromArray(a: number[], obj?: Color): Color;
    /**
     * Creates a Color instance from a hex string with a '#' prefix. Supports 12-bit #rgb shorthand.Optionally accepts a Color object to update with the parsed value and return instead ofcreating a new object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#fromHex)
     *
     * @param color The input color in a hex string.
     * @param obj A previously allocated Color object to reuse for the result.
     *
     */
    fromHex(color: string, obj?: Color): Color;
    /**
     * Creates a new Color instance, and initializes it with values from a JSON object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#fromJSON)
     *
     * @param json A JSON representation of the instance.
     *
     */
    fromJSON(json: any): Color;
    /**
     * Creates a Color instance from a string of the form "rgb()" or "rgba()". Optionally accepts aColor object to update with the parsed value and return instead of creating a new object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#fromRgb)
     *
     * @param color The input color in a string of the form "rgb()" or "rgba()".
     * @param out A previously allocated Color object to reuse for the result.
     *
     */
    fromRgb(color: string, out?: Color): Color;
    /**
     * Creates a Color instance by parsing a generic string. Accepts hex, rgb, and rgba style colorvalues. Optionally accepts a Color object to update with the parsed value and return insteadof creating a new object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#fromString)
     *
     * @param str The input value.
     * @param obj A previously allocated Color object to reuse for the result.
     *
     */
    fromString(str: string, obj?: Color): Color;
  }

  export const Color: ColorConstructor;

  interface config {
    /**
     * The URL for font resources used by the [Font](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#family) class in[FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) and [CSVLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html) labels.To use your own hosted fonts, the font files need to be in `.pbf` format, and you must follow the kebab-case naming convention (e.g. "arial-unicode-ms-bold").
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#fontsUrl)
     *
     * @default "https://static.arcgis.com/fonts"
     */
    fontsUrl: string;
    /**
     * The default [GeometryService](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html) used by widgets and otheroperations, such as on-the-fly projections.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#geometryServiceUrl)
     *
     * @default "https://utility.arcgisonline.com/arcgis/rest/services/Geometry/GeometryServer"
     */
    geometryServiceUrl: string;
    /**
     * The URL for the utility service used by [GeoRSSLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoRSSLayer.html) to convert GeoRSS documents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#geoRSSServiceUrl)
     *
     * @default "https://utility.arcgis.com/sharing/rss"
     */
    geoRSSServiceUrl: string;
    /**
     * The URL for the utility service used by [KMLLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-KMLLayer.html) to convert KML documents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#kmlServiceUrl)
     *
     * @default "https://utility.arcgis.com/sharing/kml"
     */
    kmlServiceUrl: string;
    /**
     * The URL of the portal instance. If using an on-premise portal, this valueshould be set to the portal instance, for example:`https://www.example.com/arcgis`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#portalUrl)
     *
     * @default "https://www.arcgis.com"
     */
    portalUrl: string;
    /**
     * An object with properties that control various aspects of communicationbetween the library and web servers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#request)
     */
    request: configRequest;
    /**
     * The AMD loader's configuration object, which is loaded with each worker. Modify the configuration to specifylocations of packages to be loaded with [the workers framework](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers.html) or to define a feature detection.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#workers)
     */
    workers: configWorkers;
  }

  export const config: config;

  export type AfterInterceptorCallback = (response: RequestResponse) => void;

  export type BeforeInterceptorCallback = (params: any) => any;

  export interface configRequest extends Object {
    /**
     * List of domain suffixes known to support https. This willautomatically upgrade requests made to such domains to use https insteadof http when the application is not running on http.Note that port numbers should not be included in the domain suffix to be matched.If no `httpsDomains` list exists , the API redirects all calls using https. If the listexists and a domain of a required http resource is not listed, the API sends theURL as it is specified within the code. Likewise, if the list exists and the domain of a required http resource islisted in it, the API sends an https request to that resource.The list includes the following domain suffixes by default: * `arcgis.com` * `arcgisonline.com`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#request)
     */
    httpsDomains?: string[];
    /**
     * **Since:** 4.8   Allows developers to modify requests before or after they are sent.The first interceptor that matches the request URL will be used.Example:```jsconst featureLayerUrl = "http://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer/0";esriConfig.request.interceptors.push({  // set the `urls` property to the URL of the FeatureLayer so that this  // interceptor only applies to requests made to the FeatureLayer URL  urls: featureLayerUrl,  // use the BeforeInterceptorCallback to check if the query of the  // FeatureLayer has a maxAllowableOffset property set.  // if so, then set the maxAllowableOffset to 0  before: function(params) {    if (params.requestOptions.query.maxAllowableOffset) {      params.requestOptions.query.maxAllowableOffset = 0;    }  },  // use the AfterInterceptorCallback to check if `ssl` is set to 'true'  // on the response to the request, if it's set to 'false', change  // the value to 'true' before returning the response  after: function(response) {    if (!response.ssl) {      response.ssl = true;    }  }});```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#request)
     */
    interceptors?: RequestInterceptor[];
    /**
     * Maximum number of characters allowed in the URL for HTTP GET requestsmade by [request](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html). If this limit isexceeded, HTTP POST method will be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#request)
     *
     * @default 2000
     */
    maxUrlLength?: number;
    /**
     * A proxy rule defines a proxy for a set of resources with an identical URL prefix.When using [esriRequest](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html), if a target URL matches a rule,then the request willbe sent to the specified proxy. Rather than populating this array directly,use the urlUtils.addProxyRule() method.Rule objects have the following properties:
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#request)
     */
    proxyRules?: configRequestProxyRules[];
    /**
     * Resource proxy for your application. It is used by the library whencommunicating with a web server hosted on a domain that is differentfrom the domain where your application is hosted.The library may or may not use the proxy depending on the type of requestmade, whether the server support CORS, whether the application is beingrun on older versions of browsers etc. To keep it simple, it isrecommended that you always configure a resource proxy for your application.You can download the resource proxy from this[GitHub repo](https://github.com/Esri/resource-proxy).```jsrequire(["esri/config"], function(esriConfig) {  esriConfig.request.proxyUrl = "/resource-proxy/Java/proxy.jsp";});```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#request)
     */
    proxyUrl?: string;
    /**
     * Number of milliseconds[request](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html) will waitfor response from a server. If a server fails to respond before this timeexpires, then the request is considered to have encountered an error.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#request)
     *
     * @default 60000
     */
    timeout?: number;
    /**
     * **Since:** 4.9   Indicates whether cross origin requests made to the associated servershould include credentials such as cookies and authorization headers.```jsrequire(["esri/config"], function(esriConfig) {  esriConfig.request.trustedServers.push("[<protocol>//]<hostname>.<domain>[:<port>]");});```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#request)
     */
    trustedServers?: string[];
    /**
     * **Since:** 4.5   Indicates whether `esri/request` will request a credential from `IdentityManager`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#request)
     *
     * @default true
     */
    useIdentity?: boolean;
  }

  export interface configRequestProxyRules extends Object {
    /**
     * The URL of the proxy.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#request)
     */
    proxyUrl?: string;
    /**
     * URL prefix for resources that need to                           be accessed through a specific proxy.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#request)
     */
    urlPrefix?: string;
  }

  export interface configWorkers extends Object {
    /**
     * The absolute url to the AMD loader used in the worker. The default url points to the AMD loader used by the API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#workers)
     */
    loaderUrl?: any;
    /**
     * The configuration parameters for [the workers framework](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#workers)
     */
    loaderConfig?: configWorkersLoaderConfig;
  }

  export interface configWorkersLoaderConfig extends Object {
    /**
     * The AMD loader loads all code relative to the baseUrl.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#workers)
     */
    baseUrl?: string;
    /**
     * Determines if the specified feature capabilities are supported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#workers)
     */
    has?: any;
    /**
     * Map of module id fragments to file paths.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#workers)
     */
    paths?: any;
    /**
     * Map paths in module identifiers to different paths.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#workers)
     */
    map?: any;
    /**
     * An array of objects which provide the package name and its location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#workers)
     */
    packages?: any[];
  }

  /**
   * Specifies the object used for intercepting and modifying requests made via [esriRequest](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#RequestInterceptor)
   */
  export interface RequestInterceptor extends Object {
    /**
     * Makes changes to the response after the request is sent, but before it's returned to the caller.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#RequestInterceptor)
     */
    after?: AfterInterceptorCallback;
    /**
     * Make changes to the request URL or options before the request is sent. A returned value will be used as the response data, which would prevent the request from being sent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#RequestInterceptor)
     */
    before?: BeforeInterceptorCallback;
    /**
     * Sets or adds headers into `requestOptions.headers`. See also: [requestOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#RequestInterceptor)
     */
    headers?: any;
    /**
     * Sets or adds query parameters into `requestOptions.query`. See also: [requestOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#RequestInterceptor)
     */
    query?: any;
    /**
     * Hardcodes the [response](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestResponse). The request will not be sent. This is resolved as the response `data`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#RequestInterceptor)
     */
    responseData?: any;
    /**
     * Specifies the URL(s) to apply to the interceptors. If the value is type `String`, then it matches if the request URL starts with that string. If null or undefined, the interceptor will apply to all relevant requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#RequestInterceptor)
     */
    urls?: string | RegExp | (string | RegExp)[];

    /**
     * When an error occurrs during the request processing, this function is called with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) object giving the details about what happened.For example, this could be used to log specific errors occuring with layers or services.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#RequestInterceptor)
     *
     *
     */
    error(): void;
  }

  export type WatchCallback = (newValue: any, oldValue: any, propertyName: string, target: Accessor) => void;

  /**
   * Represents a watch created when an object invokes [watch()](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Accessor.html#watch).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Accessor.html#WatchHandle)
   */
  export interface WatchHandle extends Object {
    /**
     * Removes the watch handle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Accessor.html#WatchHandle)
     *
     *
     */
    remove(): void;
  }

  interface decorators {
    /**
     * A property decorator that creates a two-way binding between the property it decorates and an inner property of one of its members.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-accessorSupport-decorators.html#aliasOf)
     *
     * @param propertyName The aliased property name.
     *
     */
    aliasOf(propertyName: string): Function;
    /**
     * This method decorator is used to define the method that will cast a property from a class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-accessorSupport-decorators.html#cast)
     *
     * @param propertyName The property name the function will cast.
     *
     */
    cast(propertyName: string): Function;
    /**
     * This parameter decorator is used to define the function or class for a parameter of a method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-accessorSupport-decorators.html#cast)
     *
     * @param classFunction The function or class to cast the parameter
     *
     */
    cast(classFunction: Function): Function;
    /**
     * A function that can be used as a class. It extends [expression](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-1-6.html#extending-expressions)and is used in conjunction with the `@subclass` decorator to create a classcompatible to [dojo.declare](https://dojotoolkit.org/reference-guide/1.10/dojo/declare.html).Please refer to the `subclass` documentation for further information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-accessorSupport-decorators.html#declared)
     *
     * @param baseClass The class to extend.
     * @param mixinClasses The mixin classes used to extend the base class.
     *
     */
    declared<T>(baseClass: T, ...mixinClasses: any[]): T;
    /**
     * This convenience decorator is used to define an [Accessor](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Accessor.html) property.Any property defined with this decorator can now be `get` and `set`. In addition,you can [watch for any property changes](https://developers.arcgis.com/javascript/latest/guide/working-with-props/index.html).Many times this decorator is used in conjunction with the [@renderable](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-widget.html#renderable) decorator.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-accessorSupport-decorators.html#property)
     *
     * @param propertyMetadata An object describing the property.
     * @param propertyMetadata.dependsOn Property names of dependencies.
     * @param propertyMetadata.type The constructor used to [autocast](https://developers.arcgis.com/javascript/latest/guide/autocasting/index.html) the property.
     * @param propertyMetadata.cast The function to use to [autocast](https://developers.arcgis.com/javascript/latest/guide/autocasting/index.html) the property. Alternative to define the `type`. The function is called with the value set by the user and should return the cast value.
     * @param propertyMetadata.readOnly Indicates whether the property is read-only.
     * @param propertyMetadata.constructOnly Indicates whether the property can be set during construction but is otherwise read-only.
     * @param propertyMetadata.aliasOf The property decorator that creates a two-way binding between the property it decorates and an inner property of one of its members.
     * @param propertyMetadata.value The default value for the property.
     *
     */
    property(propertyMetadata?: decoratorsPropertyPropertyMetadata): Function;
    /**
     * A class decorator that must be used together with the `declared` function tocreate a class compatible to [dojo.declare](https://dojotoolkit.org/reference-guide/1.10/dojo/declare.html).It supports both single and multiple inheritance and can be considered the underlying functionalityneeded when creating 4.x classes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-accessorSupport-decorators.html#subclass)
     *
     * @param declaredClass The subclass name.
     *
     */
    subclass(declaredClass?: string): Function;
  }

  export const decorators: decorators;

  export interface decoratorsPropertyPropertyMetadata extends Object {
    /**
     * Property names of dependencies.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-accessorSupport-decorators.html#property)
     */
    dependsOn?: string[];
    /**
     * The constructor used to [autocast](https://developers.arcgis.com/javascript/latest/guide/autocasting/index.html) the property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-accessorSupport-decorators.html#property)
     */
    type?: Function;
    /**
     * The function to use to [autocast](https://developers.arcgis.com/javascript/latest/guide/autocasting/index.html) the property. Alternative to define the `type`. The function is called with the value set by the user and should return the cast value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-accessorSupport-decorators.html#property)
     */
    cast?: Function;
    /**
     * Indicates whether the property is read-only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-accessorSupport-decorators.html#property)
     *
     * @default false
     */
    readOnly?: boolean;
    /**
     * Indicates whether the property can be set during construction but is otherwise read-only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-accessorSupport-decorators.html#property)
     *
     * @default false
     */
    constructOnly?: boolean;
    /**
     * The property decorator that creates a two-way binding between the property it decorates and an inner property of one of its members.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-accessorSupport-decorators.html#property)
     */
    aliasOf?: string;
    /**
     * The default value for the property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-accessorSupport-decorators.html#property)
     */
    value?: any;
  }

  interface Error {}

  interface ErrorConstructor {
    new (): Error;
  }

  export const Error: ErrorConstructor;

  interface Evented {
    /**
     * Emits an event on the instance. This method should only be used when creating subclasses of this class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Evented.html#emit)
     *
     * @param type The name of the event.
     * @param event The event payload.
     *
     */
    emit(type: string, event?: any): boolean;
    /**
     * Indicates whether there is an event listener on the instance that matchesthe provided event name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Evented.html#hasEventListener)
     *
     * @param type The name of the event.
     *
     */
    hasEventListener(type: string): boolean;
    /**
     * Registers an event handler on the instance. Call this method to hook anevent with a listener.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Evented.html#on)
     *
     * @param type A event type, or an array of event types, to listen for.
     * @param listener The function to call when the event is fired.
     *
     */
    on(type: string | string[], listener: EventHandler): IHandle;
  }

  interface EventedConstructor {
    new (): Evented;
  }

  export const Evented: EventedConstructor;

  export type EventHandler = (event: any) => void;

  interface HandleOwner extends Accessor {
    /**
     * Handle registry to help manage `handles`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-HandleOwner.html#handles)
     */
    handles: Handles;
  }

  interface HandleOwnerConstructor {
    new (properties?: HandleOwnerProperties): HandleOwner;
  }

  export const HandleOwner: HandleOwnerConstructor;

  interface HandleOwnerProperties {
    /**
     * Handle registry to help manage `handles`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-HandleOwner.html#handles)
     */
    handles?: HandlesProperties;
  }

  interface Handles extends Accessor {
    /**
     * Adds a group of handles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Handles.html#add)
     *
     * @param handles An array or collection handles to group.
     * @param key group handle key
     *
     */
    add(handles: WatchHandle | WatchHandle[] | Collection<WatchHandle>, key?: any): void;
    /**
     * Returns true if a group exists for the provided key, false otherwise.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Handles.html#has)
     *
     * @param key group handle key
     *
     */
    has(key: any): boolean;
    /**
     * Removes a group of handles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Handles.html#remove)
     *
     * @param key A group key or an array or collection of group keys to remove.
     *
     */
    remove(key?: any): void;
    /**
     * Removes all handles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Handles.html#removeAll)
     *
     *
     */
    removeAll(): void;
  }

  interface HandlesConstructor {
    new (properties?: HandlesProperties): Handles;
  }

  export const Handles: HandlesConstructor;

  interface HandlesProperties {}

  /**
   * A handle to a [highlight](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#highlight) call result.The handle can be used to remove the installed highlight.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Handles.html#Handle)
   */
  export interface Handle extends Object {
    /**
     * Removes the handle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Handles.html#Handle)
     *
     *
     */
    remove(): void;
  }

  interface JSONSupport {
    /**
     * Converts an instance of  [this class]() to its [ArcGIS portal JSON](https://developers.arcgis.com/documentation/common-data-types/geometry-objects.htm) representation.See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html) topic in the Guide for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-JSONSupport.html#toJSON)
     *
     *
     */
    toJSON(): any;
  }

  interface JSONSupportConstructor {
    new (): JSONSupport;

    /**
     * Creates a new instance of [this class]() and initializes it with values from a JSON objectgenerated from a product in the ArcGIS platform. The object passed into the input `json`parameter often comes from a response to a query operation in the REST API or a[toJSON()](http://pro.arcgis.com/en/pro-app/tool-reference/conversion/features-to-json.htm)method from another ArcGIS product. See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html)topic in the Guide for details and examples of when and how to use this function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-JSONSupport.html#fromJSON)
     *
     * @param json A JSON representation of the instance in the ArcGIS format. See                     the [ArcGIS REST API documentation](https://developers.arcgis.com/documentation/common-data-types/overview-of-common-data-types.htm) for examples of the structure of                      various input JSON objects.
     *
     */
    fromJSON(json: any): any;
  }

  export const JSONSupport: JSONSupportConstructor;

  interface lang {
    /**
     * Use this method to deeply clone objects with properties that are computed or have their own `clone()` method.For example, if you are creating an object that stores an initial extent and a spatial referencefor your application, you can use `esriLang.clone(initialProps)` to clone this object so that the `extent`and `spatialReference` are properly cloned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-lang.html#clone)
     *
     * @param elem The object to be cloned.
     *
     */
    clone(elem: any): any;
  }

  export const lang: lang;

  interface Loadable {
    /**
     * The Error object returned if an error occurred while loading.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Loadable.html#loadError)
     *
     * @default null
     */
    readonly loadError: Error;
    /**
     * Represents the status of a [load](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Loadable.html#load) operation.Value | Description------|------------not-loaded | The object's resources have not loaded.loading | The object's resources are currently loading.loaded | The object's resources have loaded without errors.failed | The object's resources failed to load. See [loadError](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Loadable.html#loadError) for more details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Loadable.html#loadStatus)
     *
     * @default not-loaded
     */
    readonly loadStatus: string;
    /**
     * A list of warnings which occurred while loading.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Loadable.html#loadWarnings)
     */
    readonly loadWarnings: any[];

    /**
     * Cancels a [load()](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Loadable.html#load) operation if it is already in progress.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Loadable.html#cancelLoad)
     *
     *
     */
    cancelLoad(): void;
    /**
     * `isFulfilled()` may be used to verify if creating an instance of the class is fulfilled (either resolved or rejected).If it is fulfilled, `true` will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Loadable.html#isFulfilled)
     *
     *
     */
    isFulfilled(): boolean;
    /**
     * `isRejected()` may be used to verify if creating an instance of the class is rejected.If it is rejected, `true` will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Loadable.html#isRejected)
     *
     *
     */
    isRejected(): boolean;
    /**
     * `isResolved()` may be used to verify if creating an instance of the class is resolved.If it is resolved, `true` will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Loadable.html#isResolved)
     *
     *
     */
    isResolved(): boolean;
    /**
     * Loads the resources referenced by this class. This method automaticallyexecutes for a [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) and all of the resourcesit references in [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) if the view is constructed witha map instance.This method must be called by the developer when accessing a resource that will not beloaded in a [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html).It's possible to provide a `signal` to stop being interested into a `Loadable` instance load status.When the signal is aborted, the instance does not stop its loading process, only [cancelLoad](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Loadable.html#cancelLoad) can abort it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Loadable.html#load)
     *
     * @param signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    load(signal?: AbortSignal): IPromise<any>;
    /**
     * `when()` may be leveraged once an instance of the class is created. This method takes two input parameters: a `callback` function and an `errback` function.The `callback` executes when the instance of the class loads. The`errback` executes if the instance of the class fails to load.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Loadable.html#when)
     *
     * @param callback The function to call when the promise resolves.
     * @param errback The function to execute when the promise fails.
     *
     */
    when(callback?: Function, errback?: Function): IPromise<any>;
  }

  interface LoadableConstructor {
    new (): Loadable;
  }

  export const Loadable: LoadableConstructor;

  interface LoadableProperties {}

  interface corePromise {
    /**
     * `isFulfilled()` may be used to verify if creating an instance of the class is fulfilled (either resolved or rejected).If it is fulfilled, `true` will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Promise.html#isFulfilled)
     *
     *
     */
    isFulfilled(): boolean;
    /**
     * `isRejected()` may be used to verify if creating an instance of the class is rejected.If it is rejected, `true` will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Promise.html#isRejected)
     *
     *
     */
    isRejected(): boolean;
    /**
     * `isResolved()` may be used to verify if creating an instance of the class is resolved.If it is resolved, `true` will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Promise.html#isResolved)
     *
     *
     */
    isResolved(): boolean;
    /**
     * `when()` may be leveraged once an instance of the class is created. This method takes two input parameters: a `callback` function and an `errback` function.The `callback` executes when the instance of the class loads. The`errback` executes if the instance of the class fails to load.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Promise.html#when)
     *
     * @param callback The function to call when the promise resolves.
     * @param errback The function to execute when the promise fails.
     *
     */
    when(callback?: Function, errback?: Function): IPromise<any>;
  }

  interface corePromiseConstructor {
    new (): corePromise;
  }

  export const corePromise: corePromiseConstructor;

  interface promiseUtils {
    /**
     * Convenience utility method for creating and resolving a promise.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-promiseUtils.html#create)
     *
     * @param executor A function that will be called with two methods, `resolve` and `reject`.
     *
     */
    create(executor: Executor): IPromise<any>;
    /**
     * A utility for ensuring an input function is not simultaneously invoked more than once at a time. Thisis useful for highly interactive applications such as those that execute statistic queries on mouse-moveor mouse-drag events. Rather than execute the query for each such event, you can "debounce", or cancelthe function execution, until the previous execution of the same function call finishes. This improvesthe performance and user experience of such applications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-promiseUtils.html#debounce)
     *
     * @param callback A function to prevent executing during the execution of a previous call  to the same function. This is typically a function that may be called on mouse-move or mouse-drag events.
     *
     */
    debounce<T>(callback: T): T;
    /**
     * Convenience utility method to wait for a number of promises to either resolve orreject. The resulting promise resolves to an array ofresult objects containingthe promise and either a value if the promise resolved, or an error if thepromise rejected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-promiseUtils.html#eachAlways)
     *
     * @param promises Array of promises, or object where each  property is a promise.
     *
     */
    eachAlways(promises: IPromise<any>[] | any): IPromise<EachAlwaysResult[]> | any;
    /**
     * A convenience utility method for filtering an array of values using an asynchronous predicate function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-promiseUtils.html#filter)
     *
     * @param input The array of input values to filter.
     * @param predicate A predicate function returning a promise.  Only array entries for which the returned promise contains `true` are kept.
     *
     */
    filter<T>(input: T[], predicate: FilterPredicateCallback): IPromise<T[]>;
    /**
     * Convenience utility method to create a promise that has been rejected with aprovided error value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-promiseUtils.html#reject)
     *
     * @param error The error to reject the resulting promise with.
     *
     */
    reject<T>(error?: any): IPromise<T>;
    /**
     * Convenience utility method to create a promise that will be resolved with aprovided value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-promiseUtils.html#resolve)
     *
     * @param value The value to resolve the resulting promise with.
     *
     */
    resolve<T>(value?: T): IPromise<T>;
  }

  export const promiseUtils: promiseUtils;

  /**
   * The result object for a promise passed to [promiseUtils.eachAlways](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-promiseUtils.html#eachAlways).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-promiseUtils.html#EachAlwaysResult)
   */
  export interface EachAlwaysResult extends Object {
    /**
     * The promise that has been fulfilled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-promiseUtils.html#EachAlwaysResult)
     */
    promise: IPromise<any>;
    /**
     * The value with which the promise resolved. Defined  only if the promise resolved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-promiseUtils.html#EachAlwaysResult)
     */
    value?: any;
    /**
     * The error with which the promise rejected. Defined  only if the promise rejected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-promiseUtils.html#EachAlwaysResult)
     */
    error?: any;
  }

  export type Executor = (resolve: ResolveCallback, reject: RejectCallback) => void;

  export type FilterPredicateCallback = (value: any, index: number) => IPromise<any>;

  export type RejectCallback = (error?: any) => void;

  export type ResolveCallback = (value?: any | IPromise<any>) => void;

  interface requireUtils {
    /**
     * **Deprecated in favor of [promiseUtils.create()](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-promiseUtils.html#create).** Dynamically requires one or more modules and returns a promise thatresolves when all the specified modules have loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-requireUtils.html#when)
     *
     * @param moduleRequire The `require` function used to load the modules. This is theAMD alias (e.g. the `moduleRequire` reference in the snippets below) used to reference the `require` module.
     * @param moduleNames The names of the modules to load.
     *
     */
    when(moduleRequire: any, moduleNames: string[] | string): IPromise<any>;
  }

  export const requireUtils: requireUtils;

  interface scheduling {
    /**
     * Registers a frame task. An animation frame is composed of different phases to let variousactors execute code before, after, or during the rendering of [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#addFrameTask)
     *
     * @param phases The callbacks for each phase of the frame.
     *
     */
    addFrameTask(phases: PhaseCallbacks): FrameTaskHandle;
    /**
     * Schedules the execution of a `callback` function at the next web browser tick.Unlike [addFrameTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#addFrameTask), a scheduled `callback` will only runonce. Scheduling a task for the next execution tick can be useful when youwant to throttle/accumulate functionality over a single javascript executioncontext.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#schedule)
     *
     * @param callback The function to call at the next tick.
     *
     */
    schedule(callback: Function): any;
  }

  export const scheduling: scheduling;

  /**
   * An object to remove or pause a frame task registered with [addFrameTask()](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#addFrameTask).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#FrameTaskHandle)
   */
  export interface FrameTaskHandle extends Object {
    /**
     * Pause the execution the frame task at every frame.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#FrameTaskHandle)
     *
     *
     */
    pause(): void;
    /**
     * Resumes the execution the frame task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#FrameTaskHandle)
     *
     *
     */
    resume(): void;
    /**
     * Removes the frame task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#FrameTaskHandle)
     *
     *
     */
    remove(): void;
  }

  export type PhaseCallback = (event?: PhaseEvent) => void;

  /**
   * A set of [callbacks](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#PhaseCallback) that will be called atspecific phases of the animation frame.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#PhaseCallbacks)
   */
  export interface PhaseCallbacks extends Object {
    /**
     * A callback called before rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#PhaseCallbacks)
     */
    prepare?: PhaseCallback;
    /**
     * A callback to execute rendering logic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#PhaseCallbacks)
     */
    render?: PhaseCallback;
    /**
     * A callback to execute state update logic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#PhaseCallbacks)
     */
    update?: PhaseCallback;
  }

  /**
   * An object with timing information.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#PhaseEvent)
   */
  export interface PhaseEvent extends Object {
    /**
     * The absolute time at the start of the current animation frame.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#PhaseEvent)
     */
    time: number;
    /**
     * The elapsed time since the last animation frame.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#PhaseEvent)
     */
    deltaTime: number;
    /**
     * The amount of time spent within the current animation frame.                                      This can be used for budgeting (e.g. some tasks may already have run).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#PhaseEvent)
     */
    elapsedFrameTime: number;
  }

  interface urlUtils {
    /**
     * Adds the given proxy rule to the proxy rules list: `esriConfig.request.proxyRules`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-urlUtils.html#addProxyRule)
     *
     * @param rule An object specifying a URL that should use the proxy. See the                     object specification table below for the required properties of this object.
     * @param rule.proxyUrl The URL of the proxy.
     * @param rule.urlPrefix The URL prefix of the resources that should be accessed                               through the given proxy.
     *
     */
    addProxyRule(rule: urlUtilsAddProxyRuleRule): number;
    /**
     * Returns the proxy rule that matches the given URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-urlUtils.html#getProxyRule)
     *
     * @param url The URL of the resources accessed via proxy.
     *
     */
    getProxyRule(url: string): any;
    /**
     * Converts the URL arguments to an object representation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-urlUtils.html#urlToObject)
     *
     * @param url The input URL.
     *
     */
    urlToObject(url: string): any;
  }

  export const urlUtils: urlUtils;

  export interface urlUtilsAddProxyRuleRule extends Object {
    /**
     * The URL of the proxy.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-urlUtils.html#addProxyRule)
     */
    proxyUrl: string;
    /**
     * The URL prefix of the resources that should be accessed                               through the given proxy.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-urlUtils.html#addProxyRule)
     */
    urlPrefix: string;
  }

  interface watchUtils {
    /**
     * Watches a property for changes and calls the callback with the initial value of the property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#init)
     *
     * @param obj The object containing the property to watch.
     * @param propertyName The name of the property to watch.
     * @param callback The function to call with the initial value of the property when the property changes.
     *
     */
    init(obj: Accessor, propertyName: string | string[], callback: WatchCallback): WatchHandle;
    /**
     * Watches a property for changes and automatically attaches and detachesan event handler for a given event to the property value as needed.The attachedHandler and detachedHandler are optional and if providedwill be called whenever the event handler is attached and detachedrespectively.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#on)
     *
     * @param obj The object containing the property to watch.
     * @param propertyName The name of the property to watch.
     * @param eventName The name of the event to attach the event handler for.
     * @param eventHandler The event handler callback function.
     * @param attachedHandler Callback called each time the event handler is attached.
     * @param detachedHandler Callback called each time the event handler is detached.
     *
     */
    on(
      obj: Accessor,
      propertyName: string | string[],
      eventName: string,
      eventHandler: Function,
      attachedHandler?: EventAttachedCallback,
      detachedHandler?: EventAttachedCallback
    ): WatchHandle;
    /**
     * Watches a property for changes once. The returned watch handle is removedafter the first time the callback has been invoked.The returned handle additionally implements the Promise interface andcan be used to create a promise chain to asynchronously handle a propertyvalue becoming truthy. The promise result is an object containing a`value`, `oldValue`, `propertyName` and `target`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#once)
     *
     * @param obj The object containing the property to watch.
     * @param propertyName The name of the property to watch.
     * @param callback The function to call when the property changes.
     *
     */
    once(obj: Accessor, propertyName: string | string[], callback?: WatchCallback): PromisedWatchHandle;
    /**
     * Watches a property for changes. The returned handle can be paused (and resumed)to temporarily prevent the callback from being called on property changes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#pausable)
     *
     * @param obj The object containing the property to watch.
     * @param propertyName The name of the property to watch.
     * @param callback The function to call when the property changes.
     *
     */
    pausable(obj: Accessor, propertyName: string | string[], callback?: WatchCallback): PausableWatchHandle;
    /**
     * Watches a property for changes. This is an alias for[Accessor.watch()](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Accessor.html#watch), provided for completeness.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#watch)
     *
     * @param obj The object containing the property to watch.
     * @param propertyName The name of the property to watch.
     * @param callback The function to call when the property changes.
     *
     */
    watch(obj: Accessor, propertyName: string | string[], callback: WatchCallback): WatchHandle;
    /**
     * Watches a property for becoming truthy. As with module:esri/core/watchUtils#init, the callbackis called initially if the property is initially truthy.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#when)
     *
     * @param obj The object containing the property to watch.
     * @param propertyName The name of the property to watch.
     * @param callback The function to call when the property changes.
     *
     */
    when(obj: Accessor, propertyName: string | string[], callback: WatchCallback): WatchHandle;
    /**
     * Watches a property for becoming `defined`. As with init(), the callbackis called if the property is initially defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenDefined)
     *
     * @param obj The object containing the property to watch.
     * @param propertyName The name of the property to watch.
     * @param callback The function to call when the property changes.
     *
     */
    whenDefined(obj: Accessor, propertyName: string | string[], callback: WatchCallback): WatchHandle;
    /**
     * Watches a property for becoming `defined` once. As with init(), the callbackis called if the property is initially `defined`. The returned watchhandle is removed after the first time the callback has been invoked.The returned handle additionally implements the Promise interface andcan be used to create a promise chain to asynchronously handle a propertyvalue becoming defined. The promise result is an object containing a`value`, `oldValue`, `propertyName` and `target`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenDefinedOnce)
     *
     * @param obj The object containing the property to watch.
     * @param propertyName The name of the property to watch.
     * @param callback The function to call when the property changes.
     *
     */
    whenDefinedOnce(obj: Accessor, propertyName: string | string[], callback?: WatchCallback): PromisedWatchHandle;
    /**
     * Watches a property for becoming `false`. As with init(), the callbackis called if the property is initially `false`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenFalse)
     *
     * @param obj The object containing the property to watch.
     * @param propertyName The name of the property to watch.
     * @param callback The function to call when the property changes.
     *
     */
    whenFalse(obj: Accessor, propertyName: string | string[], callback: WatchCallback): WatchHandle;
    /**
     * Watches a property for becoming `false` once. As with init(), the callbackis called if the property is initially `false`. The returned watchhandle is removed after the first time the callback has been invoked.The returned handle additionally implements the Promise interface andcan be used to create a promise chain to asynchronously handle a propertyvalue becoming false. The promise result is an object containing a`value`, `oldValue`, `propertyName` and `target`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenFalseOnce)
     *
     * @param obj The object containing the property to watch.
     * @param propertyName The name of the property to watch.
     * @param callback The function to call when the property changes.
     *
     */
    whenFalseOnce(obj: Accessor, propertyName: string | string[], callback?: WatchCallback): PromisedWatchHandle;
    /**
     * Watches a property for becoming falsy. As with module:esri/core/watchUtils#init, the callbackis called initially if the property is initially falsy.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenNot)
     *
     * @param obj The object containing the property to watch.
     * @param propertyName The name of the property to watch.
     * @param callback The function to call when the property changes.
     *
     */
    whenNot(obj: Accessor, propertyName: string | string[], callback: WatchCallback): WatchHandle;
    /**
     * Watches a property for becoming falsy once. As with init(), the callbackis called if the property is initially falsy. The returned watchhandle is removed after the first time the callback has been invoked.The returned handle additionally implements the Promise interface andcan be used to create a promise chain to asynchronously handle a propertyvalue becoming falsy. The promise result is an object containing a`value`, `oldValue`, `propertyName` and `target`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenNotOnce)
     *
     * @param obj The object containing the property to watch.
     * @param propertyName The name of the property to watch.
     * @param callback The function to call when the property changes.
     *
     */
    whenNotOnce(obj: Accessor, propertyName: string | string[], callback?: WatchCallback): PromisedWatchHandle;
    /**
     * Watches a property for becoming truthy once. As with init(), the callbackis called if the property is initially truthy. The returned watchhandle is removed after the first time the callback has been invoked.The returned handle additionally implements the Promise interface andcan be used to create a promise chain to asynchronously handle a propertyvalue becoming truthy. The promise result is an object containing a`value`, `oldValue`, `propertyName` and `target`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenOnce)
     *
     * @param obj The object containing the property to watch.
     * @param propertyName The name of the property to watch.
     * @param callback The function to call when the property changes.
     *
     */
    whenOnce(obj: Accessor, propertyName: string | string[], callback?: WatchCallback): PromisedWatchHandle;
    /**
     * Watches a property for becoming `true`. As with init(), the callbackis called if the property is initially `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenTrue)
     *
     * @param obj The object containing the property to watch.
     * @param propertyName The name of the property to watch.
     * @param callback The function to call when the property changes.
     *
     */
    whenTrue(obj: Accessor, propertyName: string | string[], callback: WatchCallback): WatchHandle;
    /**
     * Watches a property for becoming `true` once. As with init(), the callbackis called if the property is initially `true`. The returned watchhandle is removed after the first time the callback has been invoked.The returned handle additionally implements the Promise interface andcan be used to create a promise chain to asynchronously handle a propertyvalue becoming true. The promise result is an object containing a`value`, `oldValue`, `propertyName` and `target`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenTrueOnce)
     *
     * @param obj The object containing the property to watch.
     * @param propertyName The name of the property to watch.
     * @param callback The function to call when the property changes.
     *
     */
    whenTrueOnce(obj: Accessor, propertyName: string | string[], callback?: WatchCallback): PromisedWatchHandle;
    /**
     * Watches a property for becoming `undefined`. As with init(), the callbackis called if the property is initially `undefined`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenUndefined)
     *
     * @param obj The object containing the property to watch.
     * @param propertyName The name of the property to watch.
     * @param callback The function to call when the property changes.
     *
     */
    whenUndefined(obj: Accessor, propertyName: string | string[], callback: WatchCallback): WatchHandle;
    /**
     * Watches a property for becoming `undefined` once. As with init(), the callbackis called if the property is initially `undefined`. The returned watchhandle is removed after the first time the callback has been invoked.The returned handle additionally implements the Promise interface andcan be used to create a promise chain to asynchronously handle a propertyvalue becoming undefined. The promise result is an object containing a`value`, `oldValue`, `propertyName` and `target`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenUndefinedOnce)
     *
     * @param obj The object containing the property to watch.
     * @param propertyName The name of the property to watch.
     * @param callback The function to call when the property changes.
     *
     */
    whenUndefinedOnce(obj: Accessor, propertyName: string | string[], callback?: WatchCallback): PromisedWatchHandle;
  }

  export const watchUtils: watchUtils;

  export type EventAttachedCallback = (target?: any, propName?: string, obj?: Accessor, eventName?: string) => void;

  /**
   * Represents a watch created when an object invokes [watch()](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Accessor.html#watch).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#PausableWatchHandle)
   */
  export interface PausableWatchHandle extends Object {
    /**
     * Removes the watch handle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#PausableWatchHandle)
     *
     *
     */
    remove(): void;
    /**
     * Pauses the handle preventing changes to invoke                             the associated callback.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#PausableWatchHandle)
     *
     *
     */
    pause(): void;
    /**
     * Resumes a paused the handle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#PausableWatchHandle)
     *
     *
     */
    resume(): void;
  }

  export interface PromisedWatchHandle extends IPromise<any> {
    remove(): void;
  }

  interface workers {
    /**
     * Opens a connection to workers and loads a script with the workers framework.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers.html#open)
     *
     * @param modulePath A fully qualified URL to a script to execute with the workers framework.
     * @param options Worker options. See properties below for object specifications.
     * @param options.client The objects defining the API accessible from the module.
     * @param options.strategy Indicates how to load the module. See thetable below for a list of possible values.
     * @param options.signal [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) allows for cancelable asynchronous job.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).Possible Value | Description---------------|------------distributed | The module is loaded in each available worker. Each call to [Connection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers-Connection.html#invoke) will be targeting an available worker. Use this strategy if the module doesn't maintain information between invocations (stateless).dedicated | The module is loaded in one worker. Each call to [Connection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers-Connection.html#invoke) will be targeting a same worker. Use this strategy if the module maintains information from previous invocations or communication between main and worker threads needs to be stateful.local | The module is loaded in the main thread. Use this strategy if when using the worker framework API while disabling the use of workers.
     *
     */
    open(modulePath: string, options?: workersOpenOptions): IPromise<Connection>;
  }

  export const workers: workers;

  interface Connection {
    /**
     * A convenient method that invokes a method on each worker.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers-Connection.html#broadcast)
     *
     * @param methodName The name of the remote method to invoke on all workers.
     * @param data The unique parameter passed as argument of the remote method.
     * @param options An object specifying additional options. See the  object specification table below for the required properties of this object.
     * @param options.signal An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the executions of the remote method.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     */
    broadcast(methodName: string, data?: any, options?: ConnectionBroadcastOptions): IPromise<any>[];
    /**
     * Closes the existing connection instance to workers.Notifies all workers to destroy the connection instance and dispose the remote module.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers-Connection.html#close)
     *
     *
     */
    close(): void;
    /**
     * Invokes a [method](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers-Connection.html#basic-invocation) on the remote module loaded with the worker.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers-Connection.html#invoke)
     *
     * @param methodName The name of the method to be invoked in the script.
     * @param data The unique parameter passed as argument of the remote method. See [Passing multiple parameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers-Connection.html#multiple-parameters)section to pass more than one parameter to the remote method.
     * @param options An object specifying additional options. See the                           object specification table below for the required properties of this object.
     * @param options.transferList An array of [Transferable](https://developer.mozilla.org/en-US/docs/Web/API/Transferable)objects. Each transferable object in the array should have a corresponding entry in the data object.See [Using transferables](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers-Connection.html#using-transferables) section for more information.
     * @param options.signal An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the execution of the remote method.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     */
    invoke(methodName: string, data?: any, options?: ConnectionInvokeOptions): IPromise<any>;
  }

  interface ConnectionConstructor {
    new (): Connection;
  }

  export const Connection: ConnectionConstructor;

  export interface ConnectionBroadcastOptions extends Object {
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the executions of the remote method.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers-Connection.html#broadcast)
     */
    signal?: AbortSignal;
  }

  export interface ConnectionInvokeOptions extends Object {
    /**
     * An array of [Transferable](https://developer.mozilla.org/en-US/docs/Web/API/Transferable)objects. Each transferable object in the array should have a corresponding entry in the data object.See [Using transferables](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers-Connection.html#using-transferables) section for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers-Connection.html#invoke)
     */
    transferList?: any[];
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the execution of the remote method.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers-Connection.html#invoke)
     */
    signal?: AbortSignal;
  }

  export interface workersOpenOptions extends Object {
    /**
     * The objects defining the API accessible from the module.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers.html#open)
     */
    client?: any;
    /**
     * Indicates how to load the module. See thetable below for a list of possible values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers.html#open)
     *
     * @default distributed
     */
    strategy?: string;
    /**
     * [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) allows for cancelable asynchronous job.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).Possible Value | Description---------------|------------distributed | The module is loaded in each available worker. Each call to [Connection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers-Connection.html#invoke) will be targeting an available worker. Use this strategy if the module doesn't maintain information between invocations (stateless).dedicated | The module is loaded in one worker. Each call to [Connection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers-Connection.html#invoke) will be targeting a same worker. Use this strategy if the module maintains information from previous invocations or communication between main and worker threads needs to be stateful.local | The module is loaded in the main thread. Use this strategy if when using the worker framework API while disabling the use of workers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers.html#open)
     */
    signal?: AbortSignal;
  }

  namespace geometry {
    /**
     * Spatial Reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry.html#SpatialReference)
     */
    export type SpatialReference = __esri.SpatialReference;
    export const SpatialReference: typeof __esri.SpatialReference;

    /**
     * Geometry types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry.html#Geometry)
     */
    export type Geometry =
      | __esri.Extent
      | __esri.Multipoint
      | __esri.Point
      | __esri.Polygon
      | __esri.Polyline
      | __esri.Mesh;

    /**
     * Extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry.html#Extent)
     */
    export type Extent = __esri.Extent;
    export const Extent: typeof __esri.Extent;

    /**
     * Multipoint.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry.html#Multipoint)
     */
    export type Multipoint = __esri.Multipoint;
    export const Multipoint: typeof __esri.Multipoint;

    /**
     * Point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry.html#Point)
     */
    export type Point = __esri.Point;
    export const Point: typeof __esri.Point;

    /**
     * Polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry.html#Polygon)
     */
    export type Polygon = __esri.Polygon;
    export const Polygon: typeof __esri.Polygon;

    /**
     * Polyline.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry.html#Polyline)
     */
    export type Polyline = __esri.Polyline;
    export const Polyline: typeof __esri.Polyline;

    /**
     * Mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry.html#Mesh)
     */
    export type Mesh = __esri.Mesh;
    export const Mesh: typeof __esri.Mesh;
  }

  interface Circle extends Polygon {
    /**
     * The center point of the circle. The center must be specified either as a[Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) or an array of longitude/latitude coordinates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#center)
     */
    center: Point;
    /**
     * Applicable when the spatial reference of the center point is either set to WebMercator (wkid: 3857) or geographic/geodesic (wkid: 4326). When  either ofthose spatial references is used, set geodesic to `true` to minimizedistortion. Other coordinatesystems will not create geodesic circles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#geodesic)
     *
     * @default false
     */
    geodesic: boolean;
    /**
     * This value defines the number of pointsalong the curve of the circle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#numberOfPoints)
     *
     * @default 60
     */
    numberOfPoints: number;
    /**
     * The radius of the circle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#radius)
     *
     * @default 1000
     */
    radius: number;
    /**
     * Unit of the radius.**Possible Values:** feet | kilometers | meters | miles | nautical-miles | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#radiusUnit)
     *
     * @default meters
     */
    radiusUnit: string;

    /**
     * Creates a deep clone of Circle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#clone)
     *
     *
     */
    clone(): Circle;
  }

  interface CircleConstructor {
    new (properties?: CircleProperties): Circle;

    fromJSON(json: any): Circle;
  }

  export const Circle: CircleConstructor;

  interface CircleProperties extends PolygonProperties {
    /**
     * The center point of the circle. The center must be specified either as a[Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) or an array of longitude/latitude coordinates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#center)
     */
    center?: PointProperties;
    /**
     * Applicable when the spatial reference of the center point is either set to WebMercator (wkid: 3857) or geographic/geodesic (wkid: 4326). When  either ofthose spatial references is used, set geodesic to `true` to minimizedistortion. Other coordinatesystems will not create geodesic circles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#geodesic)
     *
     * @default false
     */
    geodesic?: boolean;
    /**
     * This value defines the number of pointsalong the curve of the circle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#numberOfPoints)
     *
     * @default 60
     */
    numberOfPoints?: number;
    /**
     * The radius of the circle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#radius)
     *
     * @default 1000
     */
    radius?: number;
    /**
     * Unit of the radius.**Possible Values:** feet | kilometers | meters | miles | nautical-miles | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#radiusUnit)
     *
     * @default meters
     */
    radiusUnit?: string;
  }

  interface coordinateFormatter {
    /**
     * Parses coordinates in latitude/longitude notation, and returns a [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) representing that location.The coordinates may use decimal degrees, degrees and decimal minutes, or degrees, minutes, and seconds format.The spatial reference provided must have an ellipsoid and datum matching those used by the source of the latitude/longitude string.If no spatial reference is provided, it is assumed the latitude/longitude coordinates are in WGS84.#### Supported characters| Symbol | Character | Name | Unicode number | HTML code || --- | --- | --- | --- | --- || Degree | * | Asterisk | U+002A | &amp;#42; ||  | ^ | Circumflex Accent | U+005E | &amp;#94;||  | ~ | Tilde | U+007E | &amp;#126; ||  | ° | Degree Sign | U+00B0 | &amp;#176; || Minute | ' | Apostrophe | U+0027 | &amp;#39; || | ′ | Prime | U+2032 | &amp;#8242; || Second | " | Quotation Mark | U+0022 | &amp;#34; |The latitude/longitude string may contain leading and trailing whitespace, and may also contain a space,comma, or vertical bar symbol to separate the latitude from the longitude. It may also contain the characters'N', 'S', 'E' and 'W', or use a minus (-) symbol to indicate the hemisphere of each value.Latitude/longitude notation examples:- 55 56 39.123N 003 09 43.034W- 55°56′39″N 3°09′43″W- 55~56.65205', -003~09.71723'- 55.9442008* | -3.1619539*
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html#fromLatitudeLongitude)
     *
     * @param coordinates The latitude/longitude notation string for the coordinates.
     * @param spatialReference A spatial reference object representing a[geographic coordinate system](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm).If `null`, WGS84 will be used.
     *
     */
    fromLatitudeLongitude(coordinates: string, spatialReference?: SpatialReference): Point;
    /**
     * Parses coordinates in Military Grid Reference System (MGRS) notation, and returns a [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) representing that location.The spatial reference provided must have an ellipsoid and datum matching those used by the source of the MGRS string.If no spatial reference is provided, it is assumed the MGRS string is referenced to WGS84.Note that the choice between zone 01 and 60 has no impact when reading from an MGRS notation string.The MGRS string can contain leading and trailing whitespace and can have whitespace between the grid zone designator, the 100km square identifier,and the numerical eastings and northings.MGRS notation examples:- 30UVG898998- 30UVG 89885 99877
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html#fromMgrs)
     *
     * @param coordinates The MGRS notation string for the coordinates.
     * @param spatialReference A spatial reference object representinga [geographic coordinate system](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm) referenced by the MGRS coordinates.If `null`, WGS84 will be used.
     * @param conversionMode The mode used by the given MGRS coordinates.**Possible Values**: automatic | new-180-in-zone-01 | new-180-in-zone-60 | old-180-in-zone-01 | old-180-in-zone-60
     *
     */
    fromMgrs(coordinates: string, spatialReference: SpatialReference, conversionMode: string): Point;
    /**
     * Parses coordinates in United States National Grid (USNG) notation, and returns a [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) representing that location.The spatial reference provided must have an ellipsoid and datum matching those used by the source of the USNG string.If no spatial reference is provided and the USNG string is suffixed with "(NAD 27)",it is assumed the USNG string is referenced to NAD 27. If no spatial reference is provided and no such suffix exists,it is assumed the USNG string is referenced to WGS84.USNG notation examples:- 13TFJ 23 59- 13TFJ2374159574
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html#fromUsng)
     *
     * @param coordinates The USNG notation string for the coordinates.
     * @param spatialReference A spatial reference object representing a[geographic coordinate system](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm) that the USNG coordinates are in.If `null`, WGS84 will be used.
     *
     */
    fromUsng(coordinates: string, spatialReference?: SpatialReference): Point;
    /**
     * Parses coordinates in Universal Transverse Mercator (UTM) notation, and returns a [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) representing that location.The spatial reference provided must have an ellipsoid and datum matching those used by the source of the UTM string.If no spatial reference is provided, it is assumed the UTM string is referenced to WGS84. The UTM string can containleading and trailing whitespace and can have whitespace between the zone and latitude designator and the numerical eastings and northings.UTM notation examples:- 30U 489885 6199877- 30U4898856199877- 30N 489885 6199877 (using N/S indicator)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html#fromUtm)
     *
     * @param coordinates The UTM notation string for the coordinates.
     * @param spatialReference A spatial reference object representing a[geographic coordinate system](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm) that the UTM coordinates are in.If `null`, WGS84 will be used.
     * @param conversionMode The latitude notation scheme used by the given UTM coordinates,either a latitudinal band, or a hemisphere designator. **Possible Values**: latitude-band-indicators | north-south-indicators
     *
     */
    fromUtm(coordinates: string, spatialReference: SpatialReference, conversionMode: string): Point;
    /**
     * Indicates if all dependencies of this module have been loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html#isLoaded)
     *
     *
     */
    isLoaded(): boolean;
    /**
     * Indicates if this module is supported in the current browser.The browser must support [WebAssembly](https://caniuse.com/#feat=wasm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html#isSupported)
     *
     *
     */
    isSupported(): boolean;
    /**
     * Load this module's dependencies.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html#load)
     *
     *
     */
    load(): IPromise<any>;
    /**
     * Returns formatted coordinates in latitude/longitude notation representing the given point's location.The latitude/longitude string will contain a space separating the latitude from the longitude value,and the characters 'N' or 'S', and 'E' and 'W', to indicate the hemisphere of each value. The stringwill also contain spaces separating the components (degrees, minutes, seconds) of each value.The precision of the output is controlled by both the `format` and `decimalPlaces` parameters.For example:| Decimal places | format | Example output | Angular precision | Approximate precision || --- | --- | --- | --- | --- || 0 | dd | 056N 0003W | 1deg | 100km || 1 | dd | 55.9N 003.2W | 0.1deg | 10km || 2 | dd | 55.94N 003.16W | 0.01deg | 1km || 3 | dd | 55.944N 003.162W | 0.001deg | 100m || 0 | ddm | 55 057N 003 010W | 1min | 2km || 1 | ddm | 55 56.7N 003 09.7W | 0.1min | 200m || 2 | ddm | 55 56.65N 003 09.72W | 0.01min | 20m || 3 | ddm | 55 56.650N 003 09.717W | 0.001min | 2m || 0 | dms | 55 56 039N 003 09 043W | 1sec | 30m || 1 | dms | 55 56 39.1N 003 09 43.0W | 0.1sec| 3m || 2 | dms | 55 56 39.12N 003 09 43.03W | 0.01sec | 300mm || 3 | dms | 55 56 39.123N 003 09 43.034W | 0.001sec | 30mm |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html#toLatitudeLongitude)
     *
     * @param point The location to be represented as a formatted latitude/longitude string.The point's [spatial reference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#spatialReference) should either be WGS84 or another[geographic coordinate system](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm).
     * @param format The mode to use when formatting the latitude/longitude string.**Possible Values**: dd | ddm | dms
     * @param decimalPlaces The number of decimal places to use, it should be an integer from 0 to 16.
     *
     */
    toLatitudeLongitude(point: Point, format: string, decimalPlaces?: number): string;
    /**
     * Returns formatted coordinates in Military Grid Reference System (MGRS) notation representing the given point's location.Note that the choice between zone 01 and 60 has an impact only when generating the MGRS notation string for a point withlongitude of exactly 180deg. The precision value controls the number of digits used to represent each numerical eastingand northing value within the MGRS string.For example:| precision | add_spaces | Example output | Approximate precision || --- | --- | --- | --- || 0 | false | 30UVG | 100km || 1 | false | 30UVG89 | 10km || 2 | false | 30UVG8999 | 1km || 3 | false | 30UVG898998 | 100m || 4 | false | 30UVG89889988 | 10m || 5 | false | 30UVG8988499881 | 1m || 0 | true | 30U VG | 100km || 1 | true | 30U VG 8 9 | 10m || 2 | true | 30U VG 89 99 | 1km || 3 | true | 30U VG 898 998 | 100m || 4 | true | 30U VG 8988 9988 | 10m || 5 | true | 30U VG 89884 99881 | 1m |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html#toMgrs)
     *
     * @param point The location to be represented in MGRS notation.The point's [spatial reference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#spatialReference) should either be WGS84 or another[geographic coordinate system](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm)
     * @param conversionMode The mode to use for the returned MGRS notation string.**Possible Values**: automatic | new-180-in-zone-01 | new-180-in-zone-60 | old-180-in-zone-01 | old-180-in-zone-60
     * @param precision The precision with which to represent the coordinates, it should be an integer from 0 to 8.
     * @param addSpaces If `false`, the generated string will contain no spaces. If `true`, a space separatesthe grid zone designator, the 100km square identifier, and the numerical easting and northing values.
     *
     */
    toMgrs(point: Point, conversionMode: string, precision?: number, addSpaces?: boolean): string;
    /**
     * Returns formatted coordinates in United States National Grid (USNG) notation representing the given point's location.The precision value controls the number of digits used to represent each numerical easting and northing value within the USNG string.For example:| precision | add_spaces | Example output | Approximate precision || --- | --- | --- | --- || 0 | false | 13TFJ | 100km || 1 | false | 13TFJ25 | 10km || 2 | false | 13TFJ2359 | 1km || 3 | false | 13TFJ237595 | 100m || 4 | false | 13TFJ23745951 | 10m || 5 | false | 13TFJ2374359512 | 1m || 0 | true | 13T FJ | 100km || 1 | true | 13T FJ 2 5 | 10m || 2 | true | 13T FJ 23 59 | 1km || 3 | true | 13T FJ 237 595 | 100m || 4 | true | 13T FJ 2374 5951 | 10m || 5 | true | 13T FJ 23743 59512 | 1m || 4* | false | 13TFJ23795929 (NAD 27) | 10m || 2* | true | 13T FJ 23 59 (NAD 27) | 1km |&ast; *When the point's spatial reference is based on NAD 27.*
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html#toUsng)
     *
     * @param point The location to be represented in USNG notation.The point's [spatial reference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#spatialReference) should either be WGS84 or another[geographic coordinate system](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm).
     * @param precision The precision with which to represent the coordinates, it should be an integer from 0 to 8.
     * @param addSpaces If `false`, the generated string will contain no spaces. If `true`, a space separatesthe grid zone designator, the 100km square identifier, and the numerical easting and northing values.
     *
     */
    toUsng(point: Point, precision?: number, addSpaces?: boolean): string;
    /**
     * Returns formatted coordinates in Universal Transverse Mercator (UTM) notation representing the given point's location.Example output for a point in the southern hemisphere:| conversionMode | add_spaces | Example output || --- | --- | --- || latitude-band-indicators | false | 30U4898846199881 || latitude-band-indicators | true | 30U 489884 6199881 || north-south-indicators | false | 30N4898846199881 || north-south-indicators | true | 30N 489884 6199881 |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html#toUtm)
     *
     * @param point The location to be represented in UTM notation.The point's [spatial reference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#spatialReference) should either be WGS84 or another[geographic coordinate system](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm)
     * @param conversionMode The latitude notation scheme to use in the returned UTM notation string,either a latitudinal band, or a hemisphere designator.**Possible Values**: latitude-band-indicators | north-south-indicators
     * @param addSpaces If `false`, the generated string will contain no spaces. If `true`, a space separatesthe UTM zone and latitude designator and each numerical easting and northing value.
     *
     */
    toUtm(point: Point, conversionMode: string, addSpaces?: boolean): string;
  }

  export const coordinateFormatter: coordinateFormatter;

  interface Extent extends Geometry {
    /**
     * The center point of the extent in map units.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#center)
     */
    readonly center: Point;
    /**
     * The height of the extent in map units (the distance between [ymin](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#ymin) and [ymax](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#ymax)).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#height)
     */
    readonly height: number;
    /**
     * The maximum possible `m` value in an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#mmax)
     *
     * @default undefined
     */
    mmax: number;
    /**
     * The minimum possible `m` value of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#mmin)
     *
     * @default undefined
     */
    mmin: number;
    /**
     * For Extent, the type is always `extent`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#type)
     */
    readonly type: "extent";
    /**
     * The width of the extent in map units (the distance between [xmin](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#xmin) and [xmax](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#xmax)).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#width)
     */
    readonly width: number;
    /**
     * The bottom-right X-coordinate of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#xmax)
     *
     * @default 0
     */
    xmax: number;
    /**
     * The top-left X-coordinate of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#xmin)
     *
     * @default 0
     */
    xmin: number;
    /**
     * The top-right Y-coordinate of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#ymax)
     *
     * @default 0
     */
    ymax: number;
    /**
     * The bottom-left Y-coordinate of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#ymin)
     *
     * @default 0
     */
    ymin: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#zmax)
     *
     * @default undefined
     */
    zmax: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#zmin)
     *
     * @default undefined
     */
    zmin: number;

    /**
     * Centers the extent to the specified [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html).This method modifies the extent geometry in-place. You should [clone](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#clone)the extent object before calling this method where appropriate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#centerAt)
     *
     * @param point The point to center the extent.
     *
     */
    centerAt(point: Point): Extent;
    /**
     * Creates a deep clone of Extent object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#clone)
     *
     *
     */
    clone(): Extent;
    /**
     * Checks if the input geometry is contained within the extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#contains)
     *
     * @param geometry Input geometry to test if it is contained within the extent.
     *
     */
    contains(geometry: Point | Extent): boolean;
    /**
     * Indicates if the input extent is equal to the testing extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#equals)
     *
     * @param extent Input extent.
     *
     */
    equals(extent: Extent): boolean;
    /**
     * Expands the extent by the given factor. For example, a value of 1.5 willexpand the extent to be 50 percent larger than the original extent.This method modifies the extent geometry in-place. You should [clone](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#clone)the extent object before calling this method where appropriate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#expand)
     *
     * @param factor The multiplier value.
     *
     */
    expand(factor: number): Extent;
    /**
     * Shrinks the original extent to the intersection with the input extent.This method modifies the extent geometry in-place. You should [clone](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#clone)the extent object before calling this method where appropriate.If the original extent and the input extent have no intersection, theextent is not modified and null is returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#intersection)
     *
     * @param extent The input extent to intersect.
     *
     */
    intersection(extent: Extent): Extent;
    /**
     * Tests to validate if the input geometry intersects the extent and returns a Boolean value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#intersects)
     *
     * @param geometry The geometry used to test the intersection. It can be a[Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html), [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html),[Polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html), [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) or[Multipoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html).
     *
     */
    intersects(geometry: Geometry): boolean;
    /**
     * Returns an array with either one Extent that's been shifted to within +/- 180 or two Extentsif the original extent intersects the International Dateline.This method modifies the extent geometry in-place. You should [clone](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#clone)the extent object before calling this method where appropriate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#normalize)
     *
     *
     */
    normalize(): Extent[];
    /**
     * Modifies the extent geometry in-place with X and Y offsets in map units.You should [clone](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#clone)the extent object before calling this method where appropriate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#offset)
     *
     * @param dx The offset distance in map units for the X-coordinate.
     * @param dy The offset distance in map units for the Y-coordinate.
     * @param dz The offset distance in map units for the Z-coordinate.
     *
     */
    offset(dx: number, dy: number, dz: number): Extent;
    /**
     * Expands the original extent to include the extent of the input Extent.This method modifies the extent geometry in-place. You should [clone](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#clone)the extent object before calling this method where appropriate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#union)
     *
     * @param extent The input extent to union.
     *
     */
    union(extent: Extent): Extent;
  }

  interface ExtentConstructor {
    new (properties?: ExtentProperties): Extent;

    fromJSON(json: any): Extent;
  }

  export const Extent: ExtentConstructor;

  interface ExtentProperties extends GeometryProperties {
    /**
     * The maximum possible `m` value in an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#mmax)
     *
     * @default undefined
     */
    mmax?: number;
    /**
     * The minimum possible `m` value of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#mmin)
     *
     * @default undefined
     */
    mmin?: number;
    /**
     * The bottom-right X-coordinate of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#xmax)
     *
     * @default 0
     */
    xmax?: number;
    /**
     * The top-left X-coordinate of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#xmin)
     *
     * @default 0
     */
    xmin?: number;
    /**
     * The top-right Y-coordinate of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#ymax)
     *
     * @default 0
     */
    ymax?: number;
    /**
     * The bottom-left Y-coordinate of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#ymin)
     *
     * @default 0
     */
    ymin?: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#zmax)
     *
     * @default undefined
     */
    zmax?: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#zmin)
     *
     * @default undefined
     */
    zmin?: number;
  }

  interface Geometry extends Accessor, JSONSupport {
    /**
     * The cache is used to store values computed from geometries that need to cleared or recomputed upon mutation.An example is the extent of a polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html#cache)
     */
    readonly cache: any;
    /**
     * The extent of the geometry. For a point, the extent is null.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html#extent)
     */
    readonly extent: Extent;
    /**
     * Indicates if the geometry has M values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html#hasM)
     */
    hasM: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html#hasZ)
     */
    hasZ: boolean;
    /**
     * The spatial reference of the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html#spatialReference)
     *
     * @default WGS84 (wkid: 4326)
     */
    spatialReference: SpatialReference;
    /**
     * The geometry type.**Possible Values:** point | multipoint | polyline | polygon | extent | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html#type)
     */
    readonly type: string;

    /**
     * Creates a deep clone of the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html#clone)
     *
     *
     */
    clone(): Geometry;
  }

  interface GeometryConstructor {
    new (properties?: GeometryProperties): Geometry;

    fromJSON(json: any): Geometry;
  }

  export const Geometry: GeometryConstructor;

  interface GeometryProperties {
    /**
     * Indicates if the geometry has M values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html#hasM)
     */
    hasM?: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html#hasZ)
     */
    hasZ?: boolean;
    /**
     * The spatial reference of the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html#spatialReference)
     *
     * @default WGS84 (wkid: 4326)
     */
    spatialReference?: SpatialReferenceProperties;
  }

  interface geometryEngine {
    /**
     * Creates planar (or Euclidean) buffer polygons at a specified distance around the input geometries.The GeometryEngine has two methods for buffering geometries client-side: buffer and [geodesicBuffer](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#geodesicBuffer).Use caution whendeciding which method to use. As a general rule, use [geodesicBuffer](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#geodesicBuffer) if the input geometrieshave a spatial reference of either WGS84 (wkid: 4326) or [Web Mercator](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isWebMercator). Only use buffer (this method)when attempting to buffer geometries with a [projected coordinate system](https://developers.arcgis.com/rest/services-reference/projected-coordinate-systems.htm) other than Web Mercator. If you need to buffer geometrieswith a [geographic coordinate system](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm) other than WGS84 (wkid: 4326), use[GeometryService.buffer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#buffer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#buffer)
     *
     * @param geometry The buffer input geometry.       The `geometry` and `distance` parameters must be specified as either both arrays or       both non-arrays. Never specify one as an array and the other a non-array.
     * @param distance The specified distance(s) for buffering.       The `geometry` and `distance` parameters must be specified as either both arrays or       both non-arrays. Never specify one as an array and the other a non-array.           When using an array of geometries as input, the length of the geometry array does not have to       equal the length of the `distance` array. For example, if you pass an array of four geometries:       `[g1, g2, g3, g4]` and an array with one distance: `[d1]`, all four geometries will be buffered by the       single distance value. If instead you use an array of three distances: `[d1, d2, d3]`, `g1` will be buffered by       `d1`, `g2` by `d2`, and `g3` and `g4` will both be buffered by `d3`. The value of the geometry array will       be matched one to one with those in the distance array until the final value of the distance array is reached,       in which case that value will be applied to the remaining geometries.
     * @param unit Measurement unit of the distance(s).       Defaults to the units of the input geometries.       Use one of the possible values listed below or any of the       [numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).           **Possible Values:** meters | feet | kilometers | miles | nautical-miles | yards
     * @param unionResults Determines whether the output geometries should be unioned into a single       polygon.
     *
     */
    buffer(
      geometry: Geometry | Geometry[],
      distance: number | number[],
      unit: string | number,
      unionResults?: boolean
    ): Polygon | Polygon[];
    /**
     * Calculates the clipped geometry from a target geometry by an envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#clip)
     *
     * @param geometry The geometry to be clipped.
     * @param envelope The envelope used to clip.
     *
     */
    clip(geometry: Geometry, envelope: Extent): Geometry;
    /**
     * Indicates if one geometry contains another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#contains)
     *
     * @param containerGeometry The geometry that is tested for the "contains" relationship to the other geometry.  Think of this geometry as the potential "container" of the `insideGeometry`.
     * @param insideGeometry The geometry that is tested for the "within" relationship to the `containerGeometry`.
     *
     */
    contains(containerGeometry: Geometry, insideGeometry: Geometry): boolean;
    /**
     * Calculates the convex hull of the input geometry. A convex hull is the smallest convex polygon that encloses a group of Objects,such as points. The input geometry can be a point, multipoint, polyline or polygon. The hull is typically a polygon but can alsobe a polyline or point in degenerate cases.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#convexHull)
     *
     * @param geometry The input geometry.
     * @param merge Dictates whether to merge output geometries.
     *
     */
    convexHull(geometry: Geometry, merge?: boolean): Geometry | Geometry[];
    /**
     * Indicates if one geometry crosses another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#crosses)
     *
     * @param geometry1 The geometry to cross.
     * @param geometry2 The geometry being crossed.
     *
     */
    crosses(geometry1: Geometry, geometry2: Geometry): boolean;
    /**
     * Split the input Polyline or Polygon where it crosses a cutting Polyline. For Polylines, all left cuts aregrouped together in the first Geometry. Right cuts and coincident cuts are grouped in the second Geometry andeach undefined cut, along with any uncut parts, are output as separate Polylines. For Polygons, all left cutsare grouped in the first Polygon, all right cuts are grouped in the second Polygon, and each undefined cut, along withany left-over parts after cutting, are output as a separate Polygon. If no cuts are returned then the array willbe empty. An undefined cut will only be produced if a left cut or right cut was produced and there was a partleft over after cutting, or a cut is bounded to the left and right of the cutter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#cut)
     *
     * @param geometry The geometry to be cut.
     * @param cutter The polyline to cut the geometry.
     *
     */
    cut(geometry: Geometry, cutter: Polyline): Geometry[];
    /**
     * Densify geometries by plotting points between existing vertices.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#densify)
     *
     * @param geometry The geometry to be densified.
     * @param maxSegmentLength The maximum segment length allowed. Must be a positive value.
     * @param maxSegmentLengthUnit Measurement unit for maxSegmentLength.Defaults to the units of the input geometry.Use one of the possible values listed below or any of the[numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).    **Possible Values:** meters | feet | kilometers | miles | nautical-miles | yards
     *
     */
    densify(geometry: Geometry, maxSegmentLength: number, maxSegmentLengthUnit: string | number): Geometry;
    /**
     * Creates the difference of two geometries. The resultant geometry is the portion of `inputGeometry` not in the `subtractor`.The dimension of the `subtractor` has to be equal to or greater than that of the `inputGeometry`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#difference)
     *
     * @param inputGeometry The input geometry to subtract from.
     * @param subtractor The geometry being subtracted from inputGeometry.
     *
     */
    difference(inputGeometry: Geometry | Geometry[], subtractor: Geometry): Geometry | Geometry[];
    /**
     * Indicates if one geometry is disjoint (doesn't intersect in any way) with another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#disjoint)
     *
     * @param geometry1 The base geometry that is tested for the "disjoint" relationship to the other geometry.
     * @param geometry2 The comparison geometry that is tested for the "disjoint" relationship to the other geometry.
     *
     */
    disjoint(geometry1: Geometry, geometry2: Geometry): boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#distance)
     *
     * @param geometry1 First input geometry.
     * @param geometry2 Second input geometry.
     * @param distanceUnit Measurement unit of the return value.Defaults to the units of the input geometries.Use one of the possible values listed below or any of the[numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).    **Possible Values:** meters | feet | kilometers | miles | nautical-miles | yards
     *
     */
    distance(geometry1: Geometry, geometry2: Geometry, distanceUnit: string | number): number;
    /**
     * Indicates if two geometries are equal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#equals)
     *
     * @param geometry1 First input geometry.
     * @param geometry2 Second input geometry.
     *
     */
    equals(geometry1: Geometry, geometry2: Geometry): boolean;
    /**
     * Returns an Object containing additional information about the input spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#extendedSpatialReferenceInfo)
     *
     * @param spatialReference The input spatial reference.
     *
     */
    extendedSpatialReferenceInfo(spatialReference: SpatialReference): any;
    /**
     * Flips a geometry on the horizontal axis. Can optionally be flipped around a point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#flipHorizontal)
     *
     * @param geometry The input geometry to be flipped.
     * @param flipOrigin Point to flip the geometry around. Defaults to the centroid of the geometry.
     *
     */
    flipHorizontal(geometry: Geometry, flipOrigin?: Point): Geometry;
    /**
     * Flips a geometry on the vertical axis. Can optionally be flipped around a point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#flipVertical)
     *
     * @param geometry The input geometry to be flipped.
     * @param flipOrigin Point to flip the geometry around. Defaults to the centroid of the geometry.
     *
     */
    flipVertical(geometry: Geometry, flipOrigin?: Point): Geometry;
    /**
     * Performs the generalize operation on the geometries in the cursor. Point and Multipoint geometries are left unchanged.Envelope is converted to a Polygon and then generalized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#generalize)
     *
     * @param geometry The input geometry to be generalized.
     * @param maxDeviation The maximum allowed deviation from the generalized geometry to the original geometry.
     * @param removeDegenerateParts When `true` the degenerate parts of the geometry willbe removed from the output (may be undesired for drawing).
     * @param maxDeviationUnit Measurement unit for maxDeviation.Defaults to the units of the input geometry.Use one of the possible values listed below or any of the[numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).    **Possible Values:** meters | feet | kilometers | miles | nautical-miles | yards
     *
     */
    generalize(
      geometry: Geometry,
      maxDeviation: number,
      removeDegenerateParts?: boolean,
      maxDeviationUnit?: string | number
    ): Geometry;
    /**
     * Calculates the area of the input geometry. As opposed to [planarArea()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#planarArea), geodesicArea takes into accountthe curvature of the earth when performing this calculation. Therefore, when using input geometries with aspatial reference of either WGS84 (wkid: 4326) or [Web Mercator](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isWebMercator), it is best practice tocalculate areas using geodesicArea(). If the input geometries have a projected coordinate system other thanWeb Mercator, use [planarArea()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#planarArea) instead.This method only works with WGS84 (wkid: 4326) and [Web Mercator](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isWebMercator) spatial references.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#geodesicArea)
     *
     * @param geometry The input polygon.
     * @param unit Measurement unit of the return value.Defaults to the units of the input geometries.Use one of the possible values listed below or any of the[numeric codes for area units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.AreaUnit.Code.ACRE).    **Possible Values:** acres | ares | hectares | square-feet | square-meters | square-yards |square-kilometers | square-miles
     *
     */
    geodesicArea(geometry: Polygon, unit: string | number): number;
    /**
     * Creates geodesic buffer polygons at a specified distance around the input geometries. When calculating distances,this method takes the curvature of the earth into account, which provides highly accurate results when dealing withvery large geometries and/or geometries that spatially vary on a global scale where one projected coordinatesystem could not accurately plot coordinates and measure distances for all the geometries.This method only works with WGS84 (wkid: 4326) and [Web Mercator](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isWebMercator) spatial references. In general,if your input geometries are assigned one of those two spatial references, you should always use geodesicBuffer() toobtain the most accurate results for those geometries. If needing to buffer points assigned a [projected coordinatesystem other than Web Mercator](https://developers.arcgis.com/rest/services-reference/projected-coordinate-systems.htm), use [buffer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#buffer) instead. If the input geometrieshave a [geographic coordinate system](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm) other than WGS84 (wkid: 4326), use[GeometryService.buffer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#buffer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#geodesicBuffer)
     *
     * @param geometry The buffer input geometry.       The `geometry` and `distance` parameters must be specified as either both arrays or       both non-arrays. Never specify one as an array and the other a non-array.
     * @param distance The specified distance(s) for buffering.       The `geometry` and `distance` parameters must be specified as either both arrays or       both non-arrays. Never specify one as an array and the other a non-array.           When using an array of geometries as input, the length of the geometry array does not have to       equal the length of the `distance` array. For example, if you pass an array of four geometries:       `[g1, g2, g3, g4]` and an array with one distance: `[d1]`, all four geometries will be buffered by the       single distance value. If instead you use an array of three distances: `[d1, d2, d3]`, `g1` will be buffered by       `d1`, `g2` by `d2`, and `g3` and `g4` will both be buffered by `d3`. The value of the geometry array will       be matched one to one with those in the distance array until the final value of the distance array is reached,       in which case that value will be applied to the remaining geometries.
     * @param unit Measurement unit of the distance(s).       Defaults to the units of the input geometries.       Use one of the possible values listed below or any of the       [numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).           **Possible Values:** meters | feet | kilometers | miles | nautical-miles | yards
     * @param unionResults Determines whether the output geometries should be unioned into a single       polygon.
     *
     */
    geodesicBuffer(
      geometry: Geometry | Geometry[],
      distance: number | number[],
      unit: string | number,
      unionResults?: boolean
    ): Polygon | Polygon[];
    /**
     * Returns a geodesically densified version of the input geometry. Use this function to draw the line(s) of the geometry along great circles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#geodesicDensify)
     *
     * @param geometry A polyline or polygon to densify.
     * @param maxSegmentLength The maximum segment length allowed. This must be a positive value.
     * @param maxSegmentLengthUnit Measurement unit for `maxSegmentLength`.If a unit is not specified, the units are considered to be the same as the units of the `geometry`.Use one of the possible values listed below or any of the[numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).    **Possible Values:** meters | feet | kilometers | miles | nautical-miles | yards
     *
     */
    geodesicDensify(
      geometry: Polyline | Polygon,
      maxSegmentLength: number,
      maxSegmentLengthUnit: string | number
    ): Geometry;
    /**
     * Calculates the length of the input geometry. As opposed to [planarLength()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#planarLength), geodesicLength() takes into accountthe curvature of the earth when performing this calculation. Therefore, when using input geometries with aspatial reference of either WGS84 (wkid: 4326) or [Web Mercator](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isWebMercator), it is best practice tocalculate lengths using geodesicLength(). If the input geometries have a projected coordinate system other thanWeb Mercator, use [planarLength()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#planarLength) instead.This method only works with WGS84 (wkid: 4326) and [Web Mercator](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isWebMercator) spatial references.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#geodesicLength)
     *
     * @param geometry The input geometry.
     * @param unit Measurement unit of the return value.Defaults to the units of the input geometry.Use one of the possible values listed below or any of the[numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).    **Possible Values:** meters | feet | kilometers | miles | nautical-miles | yards
     *
     */
    geodesicLength(geometry: Geometry, unit: string | number): number;
    /**
     * Creates a new geometry through intersection between two geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#intersect)
     *
     * @param geometry The input geometry(ies).
     * @param intersector The geometry being intersected.
     *
     */
    intersect(geometry: Geometry | Geometry[], intersector: Geometry): Geometry | Geometry[];
    /**
     * Indicates if one geometry intersects another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#intersects)
     *
     * @param geometry1 The geometry that is tested for the intersects relationship to the other geometry.
     * @param geometry2 The geometry being intersected.
     *
     */
    intersects(geometry1: Geometry, geometry2: Geometry): boolean;
    /**
     * Indicates if the given geometry is topologically simple.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#isSimple)
     *
     * @param geometry The input geometry.
     *
     */
    isSimple(geometry: Geometry): boolean;
    /**
     * Finds the coordinate of the geometry that is closest to the specified point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#nearestCoordinate)
     *
     * @param geometry The geometry to consider.
     * @param inputPoint The point used to search the nearest coordinate in the geometry.
     *
     */
    nearestCoordinate(geometry: Geometry, inputPoint: Point): NearestPointResult;
    /**
     * Finds the vertex on the geometry nearest to the specified point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#nearestVertex)
     *
     * @param geometry The geometry to consider.
     * @param inputPoint The point used to search the nearest vertex in the geometry.
     *
     */
    nearestVertex(geometry: Geometry, inputPoint: Point): NearestPointResult;
    /**
     * Finds all vertices in the given distance from the specified point, sorted from the closest to the furthest andreturns them as an array of Objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#nearestVertices)
     *
     * @param geometry The geometry to consider.
     * @param inputPoint The point from which to measure.
     * @param searchRadius The distance to search from the inputPoint in the units of the view's spatial reference.
     * @param maxVertexCountToReturn The maximum number of vertices to return.
     *
     */
    nearestVertices(
      geometry: Geometry,
      inputPoint: Point,
      searchRadius: number,
      maxVertexCountToReturn: number
    ): NearestPointResult[];
    /**
     * The offset operation creates a geometry that is a constant planar distance from an inputpolyline or polygon. It is similar to buffering, but produces a one-sided result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#offset)
     *
     * @param geometry The geometries to offset.
     * @param offsetDistance The planar distance to offset from the input geometry. If offsetDistance > 0, then the offsetgeometry is constructed to the right of the oriented input geometry, if offsetDistance = 0, then there is nochange in the geometries, otherwise it is constructed to the left. For a simple polygon, the orientation of outerrings is clockwise and for inner rings it is counter clockwise. So the "right side" of a simple polygon is always its inside.
     * @param offsetUnit Measurement unit of the offset distance.Defaults to the units of the input geometries.Use one of the possible values listed below or any of the[numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).    **Possible Values:** meters | feet | kilometers | miles | nautical-miles | yards
     * @param joinType The join type.     **Possible values:** round | bevel | miter | square
     * @param bevelRatio Applicable when `joinType = 'miter'`; bevelRatio is multiplied by the offset distance andthe result determines how far a mitered offset intersection can be located before it is beveled.
     * @param flattenError Applicable when `joinType = 'round'`; flattenError determines the maximum distance of the resultingsegments compared to the true circular arc. The algorithm never produces more than around 180 vertices for each round join.
     *
     */
    offset(
      geometry: Geometry | Geometry[],
      offsetDistance: number,
      offsetUnit: string | number,
      joinType: string,
      bevelRatio?: number,
      flattenError?: number
    ): Geometry | Geometry[];
    /**
     * Indicates if one geometry overlaps another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#overlaps)
     *
     * @param geometry1 The base geometry that is tested for the "overlaps" relationship with the other geometry.
     * @param geometry2 The comparison geometry that is tested for the "overlaps" relationship with the other geometry.
     *
     */
    overlaps(geometry1: Geometry, geometry2: Geometry): boolean;
    /**
     * Calculates the area of the input geometry. As opposed to [geodesicArea()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#geodesicArea), planarArea() performsthis calculation using projected coordinates and does not take into account the earth's curvature. When using input geometries with aspatial reference of either WGS84 (wkid: 4326) or [Web Mercator](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isWebMercator), it is best practice tocalculate areas using [geodesicArea()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#geodesicArea). If the input geometries have a projected coordinate system other thanWeb Mercator, use planarArea() instead.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#planarArea)
     *
     * @param geometry The input polygon.
     * @param unit Measurement unit of the return value.Defaults to the units of the input geometries.Use one of the possible values listed below or any of the[numeric codes for area units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.AreaUnit.Code.ACRE).**Possible Values:** acres | ares | hectares | square-feet | square-meters | square-yards |square-kilometers | square-miles
     *
     */
    planarArea(geometry: Polygon, unit: string | number): number;
    /**
     * Calculates the length of the input geometry. As opposed to [geodesicLength()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#geodesicLength), planarLength() usesprojected coordinates and does not take into accountthe curvature of the earth when performing this calculation. When using input geometries with aspatial reference of either WGS84 (wkid: 4326) or [Web Mercator](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isWebMercator), it is best practice tocalculate lengths using [geodesicLength()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#geodesicLength). If the input geometries have a projected coordinate system other thanWeb Mercator, use planarLength() instead.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#planarLength)
     *
     * @param geometry The input geometry.
     * @param unit Measurement unit of the return value.Defaults to the units of the input geometries.Use one of the possible values listed below or any of the[numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).**Possible Values:** meters | feet | kilometers | miles | nautical-miles | yards
     *
     */
    planarLength(geometry: Geometry, unit: string | number): number;
    /**
     * Indicates if the given DE-9IM relation holds for the two geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#relate)
     *
     * @param geometry1 The first geometry for the relation.
     * @param geometry2 The second geometry for the relation.
     * @param relation The Dimensionally Extended 9 Intersection Model (DE-9IM) matrix relation(encoded as a string) to test against the relationship of the two geometries. This string contains thetest result of each intersection represented in the DE-9IM matrix. Each result is one character of thestring and may be represented as either a number (maximum dimension returned: `0`,`1`,`2`), a Booleanvalue (`T` or `F`), or a mask character (for ignoring results: '\*').    Example: Each of the followingDE-9IM string codes are valid for testing whether a polygon geometry completely contains a line geometry:`TTTFFTFFT` (Boolean), 'T*\*\*\*\*\*FF\*' (ignore irrelevant intersections), or '102FF\*FF\*' (dimension form).Each returns the same result.    See [this article](https://en.wikipedia.org/wiki/DE-9IM) and[this ArcGIS help page](https://desktop.arcgis.com/en/arcmap/latest/manage-data/using-sql-with-gdbs/relational-functions-for-st-geometry.htm)for more information about the DE-9IM model and how string codes are constructed.
     *
     */
    relate(geometry1: Geometry, geometry2: Geometry, relation: string): boolean;
    /**
     * Rotates a geometry counterclockwise by the specified number of degrees.Rotation is around the centroid, or a given rotation point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#rotate)
     *
     * @param geometry The geometry to rotate.
     * @param angle The rotation angle in degrees.
     * @param rotationOrigin Point to rotate the geometry around. Defaults to the centroid of the geometry.
     *
     */
    rotate(geometry: Geometry, angle: number, rotationOrigin?: Point): Geometry;
    /**
     * Performs the simplify operation on the geometry which alters the given geometries to make their definitionstopologically legal with respect to their geometry type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#simplify)
     *
     * @param geometry The geometry to be simplified.
     *
     */
    simplify(geometry: Geometry): Geometry;
    /**
     * Creates the symmetric difference of two geometries. The symmetric difference includes the partsthat are in either of the sets, but not in both.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#symmetricDifference)
     *
     * @param leftGeometry One of the Geometry instances in the XOR operation.
     * @param rightGeometry One of the Geometry instances in the XOR operation.
     *
     */
    symmetricDifference(leftGeometry: Geometry | Geometry[], rightGeometry: Geometry): Geometry | Geometry[];
    /**
     * Indicates if one geometry touches another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#touches)
     *
     * @param geometry1 The geometry to test the "touches" relationship with the other geometry.
     * @param geometry2 The geometry to be touched.
     *
     */
    touches(geometry1: Geometry, geometry2: Geometry): boolean;
    /**
     * All inputs must be of the same type of geometries and share one spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#union)
     *
     * @param geometries An array of Geometries to union.
     *
     */
    union(geometries: Geometry[]): Geometry;
    /**
     * Indicates if one geometry is within another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#within)
     *
     * @param innerGeometry The base geometry that is tested for the "within" relationship to the other geometry.
     * @param outerGeometry The comparison geometry that is tested for the "contains" relationship to the other geometry.
     *
     */
    within(innerGeometry: Geometry, outerGeometry: Geometry): boolean;
  }

  export const geometryEngine: geometryEngine;

  /**
   * Object returned from the [nearestCoordinate()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#nearestCoordinate), [nearestVertex()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#nearestVertex), and [nearestVertices()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#nearestVertices) methods.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#NearestPointResult)
   */
  export interface NearestPointResult extends Object {
    /**
     * A vertex within the specified distance of the search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#NearestPointResult)
     */
    coordinate: Point;
    /**
     * The distance from the `inputPoint` in the units of the view's spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#NearestPointResult)
     */
    distance: number;
    /**
     * Indicates if the vertex is on the right side of the `geometry`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#NearestPointResult)
     */
    isRightSide: boolean;
    /**
     * The index of the vertex within the geometry's rings or paths.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#NearestPointResult)
     */
    vertexIndex: number;
    /**
     * Indicates if it is an empty geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#NearestPointResult)
     */
    isEmpty: boolean;
  }

  interface geometryEngineAsync {
    /**
     * Creates planar (or Euclidean) buffer polygons at a specified distance around the input geometries.The GeometryEngine has two methods for buffering geometries client-side: buffer and [geodesicBuffer](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#geodesicBuffer).Use caution whendeciding which method to use. As a general rule, use [geodesicBuffer](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#geodesicBuffer) if the input geometrieshave a spatial reference of either WGS84 (wkid: 4326) or [Web Mercator](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isWebMercator). Only use buffer (this method)when attempting to buffer geometries with a [projected coordinate system](https://developers.arcgis.com/rest/services-reference/projected-coordinate-systems.htm) other than Web Mercator. If you need to buffer geometrieswith a [geographic coordinate system](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm) other than WGS84 (wkid: 4326), use[GeometryService.buffer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#buffer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#buffer)
     *
     * @param geometry The buffer input geometry.       The `geometry` and `distance` parameters must be specified as either both arrays or       both non-arrays. Never specify one as an array and the other a non-array.
     * @param distance The specified distance(s) for buffering.       The `geometry` and `distance` parameters must be specified as either both arrays or       both non-arrays. Never specify one as an array and the other a non-array.           When using an array of geometries as input, the length of the geometry array does not have to       equal the length of the `distance` array. For example, if you pass an array of four geometries:       `[g1, g2, g3, g4]` and an array with one distance: `[d1]`, all four geometries will be buffered by the       single distance value. If instead you use an array of three distances: `[d1, d2, d3]`, `g1` will be buffered by       `d1`, `g2` by `d2`, and `g3` and `g4` will both be buffered by `d3`. The value of the geometry array will       be matched one to one with those in the distance array until the final value of the distance array is reached,       in which case that value will be applied to the remaining geometries.
     * @param unit Measurement unit of the distance(s).       Defaults to the units of the input geometries.       Use one of the possible values listed below or any of the       [numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).           **Possible Values:** meters | feet | kilometers | miles | nautical-miles | yards
     * @param unionResults Determines whether the output geometries should be unioned into a single       polygon.
     *
     */
    buffer(
      geometry: Geometry | Geometry[],
      distance: number | number[],
      unit: string | number,
      unionResults?: boolean
    ): IPromise<Polygon | Polygon[]>;
    /**
     * Calculates the clipped geometry from a target geometry by an envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#clip)
     *
     * @param geometry The geometry to be clipped.
     * @param envelope The envelope used to clip.
     *
     */
    clip(geometry: Geometry, envelope: Extent): IPromise<Geometry>;
    /**
     * Indicates if one geometry contains another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#contains)
     *
     * @param containerGeometry The geometry that is tested for the "contains" relationship to the other geometry.  Think of this geometry as the potential "container" of the `insideGeometry`.
     * @param insideGeometry The geometry that is tested for the "within" relationship to the `containerGeometry`.
     *
     */
    contains(containerGeometry: Geometry, insideGeometry: Geometry): IPromise<boolean>;
    /**
     * Calculates the convex hull of the input geometry. A convex hull is the smallest convex polygon that encloses a group of Objects,such as points. The input geometry can be a point, multipoint, polyline or polygon. The hull is typically a polygon but can alsobe a polyline or point in degenerate cases.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#convexHull)
     *
     * @param geometry The input geometry.
     * @param merge Dictates whether to merge output geometries.
     *
     */
    convexHull(geometry: Geometry, merge?: boolean): IPromise<Geometry>;
    /**
     * Indicates if one geometry crosses another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#crosses)
     *
     * @param geometry1 The geometry to cross.
     * @param geometry2 The geometry being crossed.
     *
     */
    crosses(geometry1: Geometry, geometry2: Geometry): IPromise<boolean>;
    /**
     * Split the input Polyline or Polygon where it crosses a cutting Polyline. For Polylines, all left cuts aregrouped together in the first Geometry. Right cuts and coincident cuts are grouped in the second Geometry andeach undefined cut, along with any uncut parts, are output as separate Polylines. For Polygons, all left cutsare grouped in the first Polygon, all right cuts are grouped in the second Polygon, and each undefined cut, along withany left-over parts after cutting, are output as a separate Polygon. If no cuts are returned then the array willbe empty. An undefined cut will only be produced if a left cut or right cut was produced and there was a partleft over after cutting, or a cut is bounded to the left and right of the cutter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#cut)
     *
     * @param geometry The geometry to be cut.
     * @param cutter The polyline to cut the geometry.
     *
     */
    cut(geometry: Geometry, cutter: Polyline): IPromise<Geometry[]>;
    /**
     * Densify geometries by plotting points between existing vertices.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#densify)
     *
     * @param geometry The geometry to be densified.
     * @param maxSegmentLength The maximum segment length allowed. Must be a positive value.
     * @param maxSegmentLengthUnit Measurement unit for maxSegmentLength.Defaults to the units of the input geometry.Use one of the possible values listed below or any of the[numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).    **Possible Values:** meters | feet | kilometers | miles | nautical-miles | yards
     *
     */
    densify(geometry: Geometry, maxSegmentLength: number, maxSegmentLengthUnit: string | number): IPromise<Geometry>;
    /**
     * Creates the difference of two geometries. The resultant geometry is the portion of inputGeometry not in the subtractor.The dimension of the subtractor has to be equal to or greater than that of the inputGeometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#difference)
     *
     * @param inputGeometry The input geometry to subtract from.
     * @param subtractor The geometry being subtracted from inputGeometry.
     *
     */
    difference(inputGeometry: Geometry | Geometry[], subtractor: Geometry): IPromise<Geometry>;
    /**
     * Indicates if one geometry is disjoint (doesn't intersect in any way) with another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#disjoint)
     *
     * @param geometry1 The base geometry that is tested for the "disjoint" relationship to the other geometry.
     * @param geometry2 The comparison geometry that is tested for the "disjoint" relationship to the other geometry.
     *
     */
    disjoint(geometry1: Geometry, geometry2: Geometry): IPromise<boolean>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#distance)
     *
     * @param geometry1 First input geometry.
     * @param geometry2 Second input geometry.
     * @param distanceUnit Measurement unit of the return value.Defaults to the units of the input geometries.Use one of the possible values listed below or any of the[numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).    **Possible Values:** meters | feet | kilometers | miles | nautical-miles | yards
     *
     */
    distance(geometry1: Geometry, geometry2: Geometry, distanceUnit: string | number): IPromise<number>;
    /**
     * Indicates if two geometries are equal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#equals)
     *
     * @param geometry1 First input geometry.
     * @param geometry2 Second input geometry.
     *
     */
    equals(geometry1: Geometry, geometry2: Geometry): IPromise<boolean>;
    /**
     * Returns an Object containing additional information about the input spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#extendedSpatialReferenceInfo)
     *
     * @param spatialReference The input spatial reference.
     *
     */
    extendedSpatialReferenceInfo(spatialReference: SpatialReference): IPromise<any>;
    /**
     * Flips a geometry on the horizontal axis. Can optionally be flipped around a point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#flipHorizontal)
     *
     * @param geometry The input geometry to be flipped.
     * @param flipOrigin Point to flip the geometry around. Defaults to the centroid of the geometry.
     *
     */
    flipHorizontal(geometry: Geometry, flipOrigin?: Point): IPromise<Geometry>;
    /**
     * Flips a geometry on the vertical axis. Can optionally be flipped around a point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#flipVertical)
     *
     * @param geometry The input geometry to be flipped.
     * @param flipOrigin Point to flip the geometry around. Defaults to the centroid of the geometry.
     *
     */
    flipVertical(geometry: Geometry, flipOrigin?: Point): IPromise<Geometry>;
    /**
     * Performs the generalize operation on the geometries in the cursor. Point and Multipoint geometries are left unchanged.Envelope is converted to a Polygon and then generalized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#generalize)
     *
     * @param geometry The input geometry to be generalized.
     * @param maxDeviation The maximum allowed deviation from the generalized geometry to the original geometry.
     * @param removeDegenerateParts When `true` the degenerate parts of the geometry willbe removed from the output (may be undesired for drawing).
     * @param maxDeviationUnit Measurement unit for maxDeviation.Defaults to the units of the input geometry.Use one of the possible values listed below or any of the[numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).    **Possible Values:** meters | feet | kilometers | miles | nautical-miles | yards
     *
     */
    generalize(
      geometry: Geometry,
      maxDeviation: number,
      removeDegenerateParts?: boolean,
      maxDeviationUnit?: string | number
    ): IPromise<Geometry>;
    /**
     * Calculates the area of the input geometry. As opposed to [planarArea()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#planarArea), geodesicArea takes into accountthe curvature of the earth when performing this calculation. Therefore, when using input geometries with aspatial reference of either WGS84 (wkid: 4326) or [Web Mercator](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isWebMercator), it is best practice tocalculate areas using geodesicArea(). If the input geometries have a projected coordinate system other thanWeb Mercator, use [planarArea()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#planarArea) instead.This method only works with WGS84 (wkid: 4326) and [Web Mercator](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isWebMercator) spatial references.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#geodesicArea)
     *
     * @param geometry The input polygon.
     * @param unit Measurement unit of the return value.Defaults to the units of the input geometries.Use one of the possible values listed below or any of the[numeric codes for area units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.AreaUnit.Code.ACRE).    **Possible Values:** acres | ares | hectares | square-feet | square-meters | square-yards |square-kilometers | square-miles
     *
     */
    geodesicArea(geometry: Polygon, unit: string | number): IPromise<number>;
    /**
     * Creates geodesic buffer polygons at a specified distance around the input geometries. When calculating distances,this method takes the curvature of the earth into account, which provides highly accurate results when dealing withvery large geometries and/or geometries that spatially vary on a global scale where one projected coordinatesystem could not accurately plot coordinates and measure distances for all the geometries.This method only works with WGS84 (wkid: 4326) and [Web Mercator](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isWebMercator) spatial references. In general,if your input geometries are assigned one of those two spatial references, you should always use geodesicBuffer() toobtain the most accurate results for those geometries. If needing to buffer points assigned a [projected coordinatesystem other than Web Mercator](https://developers.arcgis.com/rest/services-reference/projected-coordinate-systems.htm), use [buffer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#buffer) instead. If the input geometrieshave a [geographic coordinate system](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm) other than WGS84 (wkid: 4326), use[GeometryService.buffer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#buffer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#geodesicBuffer)
     *
     * @param geometry The buffer input geometry.       The `geometry` and `distance` parameters must be specified as either both arrays or       both non-arrays. Never specify one as an array and the other a non-array.
     * @param distance The specified distance(s) for buffering.       The `geometry` and `distance` parameters must be specified as either both arrays or       both non-arrays. Never specify one as an array and the other a non-array.           When using an array of geometries as input, the length of the geometry array does not have to       equal the length of the `distance` array. For example, if you pass an array of four geometries:       `[g1, g2, g3, g4]` and an array with one distance: `[d1]`, all four geometries will be buffered by the       single distance value. If instead you use an array of three distances: `[d1, d2, d3]`, `g1` will be buffered by       `d1`, `g2` by `d2`, and `g3` and `g4` will both be buffered by `d3`. The value of the geometry array will       be matched one to one with those in the distance array until the final value of the distance array is reached,       in which case that value will be applied to the remaining geometries.
     * @param unit Measurement unit of the distance(s).       Defaults to the units of the input geometries.       Use one of the possible values listed below or any of the       [numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).           **Possible Values:** meters | feet | kilometers | miles | nautical-miles | yards
     * @param unionResults Determines whether the output geometries should be unioned into a single       polygon.
     *
     */
    geodesicBuffer(
      geometry: Geometry | Geometry[],
      distance: number | number[],
      unit: string | number,
      unionResults?: boolean
    ): IPromise<Polygon | Polygon[]>;
    /**
     * Returns a geodesically densified version of the input geometry. Use this function to draw the line(s) of the geometry along great circles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#geodesicDensify)
     *
     * @param geometry A polyline or polygon to densify.
     * @param maxSegmentLength The maximum segment length allowed. This must be a positive value.
     * @param maxSegmentLengthUnit Measurement unit for `maxSegmentLength`.If a unit is not specified, the units are considered to be the same as the units of the `geometry`.Use one of the possible values listed below or any of the[numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).    **Possible Values:** meters | feet | kilometers | miles | nautical-miles | yards
     *
     */
    geodesicDensify(
      geometry: Polyline | Polygon,
      maxSegmentLength: number,
      maxSegmentLengthUnit: string | number
    ): IPromise<Geometry>;
    /**
     * Calculates the length of the input geometry. As opposed to [planarLength()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#planarLength), geodesicLength() takes into accountthe curvature of the earth when performing this calculation. Therefore, when using input geometries with aspatial reference of either WGS84 (wkid: 4326) or [Web Mercator](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isWebMercator), it is best practice tocalculate lengths using geodesicLength(). If the input geometries have a projected coordinate system other thanWeb Mercator, use [planarLength()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#planarLength) instead.This method only works with WGS84 (wkid: 4326) and [Web Mercator](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isWebMercator) spatial references.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#geodesicLength)
     *
     * @param geometry The input geometry.
     * @param unit Measurement unit of the return value.Defaults to the units of the input geometry.Use one of the possible values listed below or any of the[numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).    **Possible Values:** meters | feet | kilometers | miles | nautical-miles | yards
     *
     */
    geodesicLength(geometry: Geometry, unit: string | number): IPromise<number>;
    /**
     * Creates a new geometry through intersection between two geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#intersect)
     *
     * @param geometry The input geometry(ies).
     * @param intersector The geometry being intersected.
     *
     */
    intersect(geometry: Geometry | Geometry[], intersector: Geometry): IPromise<Geometry>;
    /**
     * Indicates if one geometry intersects another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#intersects)
     *
     * @param geometry1 The geometry that is tested for the intersects relationship to the other geometry.
     * @param geometry2 The geometry being intersected.
     *
     */
    intersects(geometry1: Geometry, geometry2: Geometry): IPromise<boolean>;
    /**
     * Indicates if the given geometry is topologically simple.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#isSimple)
     *
     * @param geometry The input geometry.
     *
     */
    isSimple(geometry: Geometry): IPromise<boolean>;
    /**
     * Finds the coordinate of the geometry that is closest to the specified point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#nearestCoordinate)
     *
     * @param geometry The geometry to consider.
     * @param inputPoint The point used to search the nearest coordinate in the geometry.
     *
     */
    nearestCoordinate(geometry: Geometry, inputPoint: Point): IPromise<NearestPointResult>;
    /**
     * Finds vertex on the geometry nearest to the specified point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#nearestVertex)
     *
     * @param geometry The geometry to consider.
     * @param inputPoint The point used to search the nearest vertex in the geometry.
     *
     */
    nearestVertex(geometry: Geometry, inputPoint: Point): IPromise<NearestPointResult>;
    /**
     * Finds all vertices in the given distance from the specified point, sorted from the closest to the furthest andreturns them as an array of Objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#nearestVertices)
     *
     * @param geometry The geometry to consider.
     * @param inputPoint The point from which to measure.
     * @param searchRadius The distance to search from the inputPoint in the units of the view's spatial reference.
     * @param maxVertexCountToReturn The maximum number of vertices to return.
     *
     */
    nearestVertices(
      geometry: Geometry,
      inputPoint: Point,
      searchRadius: number,
      maxVertexCountToReturn: number
    ): IPromise<NearestPointResult>;
    /**
     * The offset operation creates a geometry that is a constant planar distance from an inputpolyline or polygon. It is similar to buffering, but produces a one-sided result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#offset)
     *
     * @param geometry The geometries to offset.
     * @param offsetDistance The planar distance to offset from the input geometry. If offsetDistance > 0, then the offsetgeometry is constructed to the right of the oriented input geometry, if offsetDistance = 0, then there is nochange in the geometries, otherwise it is constructed to the left. For a simple polygon, the orientation of outerrings is clockwise and for inner rings it is counter clockwise. So the "right side" of a simple polygon is always its inside.
     * @param offsetUnit Measurement unit of the offset distance.Defaults to the units of the input geometries.Use one of the possible values listed below or any of the[numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).    **Possible Values:** meters | feet | kilometers | miles | nautical-miles | yards
     * @param joinType The join type.     **Possible values:** round | bevel | miter | square
     * @param bevelRatio Applicable when `joinType = 'miter'`; bevelRatio is multiplied by the offset distance andthe result determines how far a mitered offset intersection can be located before it is beveled.
     * @param flattenError Applicable when `joinType = 'round'`; flattenError determines the maximum distance of the resultingsegments compared to the true circular arc. The algorithm never produces more than around 180 vertices for each round join.
     *
     */
    offset(
      geometry: Geometry | Geometry[],
      offsetDistance: number,
      offsetUnit: string | number,
      joinType: string,
      bevelRatio?: number,
      flattenError?: number
    ): IPromise<Geometry[]>;
    /**
     * Indicates if one geometry overlaps another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#overlaps)
     *
     * @param geometry1 The base geometry that is tested for the "overlaps" relationship with the other geometry.
     * @param geometry2 The comparison geometry that is tested for the "overlaps" relationship with the other geometry.
     *
     */
    overlaps(geometry1: Geometry, geometry2: Geometry): IPromise<boolean>;
    /**
     * Calculates the area of the input geometry. As opposed to [geodesicArea()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#geodesicArea), planarArea() performsthis calculation using projected coordinates and does not take into account the earth's curvature. When using input geometries with aspatial reference of either WGS84 (wkid: 4326) or [Web Mercator](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isWebMercator), it is best practice tocalculate areas using [geodesicArea()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#geodesicArea). If the input geometries have a projected coordinate system other thanWeb Mercator, use planarArea() instead.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#planarArea)
     *
     * @param geometry The input polygon.
     * @param unit Measurement unit of the return value.Defaults to the units of the input geometries.Use one of the possible values listed below or any of the[numeric codes for area units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.AreaUnit.Code.ACRE).    **Possible Values:** acres | ares | hectares | square-feet | square-meters | square-yards |square-kilometers | square-miles
     *
     */
    planarArea(geometry: Polygon, unit: string | number): IPromise<number>;
    /**
     * Calculates the length of the input geometry. As opposed to [geodesicLength()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#geodesicLength), planarLength() usesprojected coordinates and does not take into accountthe curvature of the earth when performing this calculation. When using input geometries with aspatial reference of either WGS84 (wkid: 4326) or [Web Mercator](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isWebMercator), it is best practice tocalculate lengths using [geodesicLength()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#geodesicLength). If the input geometries have a projected coordinate system other thanWeb Mercator, use planarLength() instead.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#planarLength)
     *
     * @param geometry The input geometry.
     * @param unit Measurement unit of the return value.Defaults to the units of the input geometries.Use one of the possible values listed below or any of the[numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).    **Possible Values:** meters | feet | kilometers | miles | nautical-miles | yards
     *
     */
    planarLength(geometry: Geometry, unit: string | number): IPromise<number>;
    /**
     * Indicates if the given DE-9IM relation holds for the two geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#relate)
     *
     * @param geometry1 The first geometry for the relation.
     * @param geometry2 The second geometry for the relation.
     * @param relation The Dimensionally Extended 9 Intersection Model (DE-9IM) matrix relation(encoded as a string) to test against the relationship of the two geometries. This string contains thetest result of each intersection represented in the DE-9IM matrix. Each result is one character of thestring and may be represented as either a number (maximum dimension returned: `0`,`1`,`2`), a Booleanvalue (`T` or `F`), or a mask character (for ignoring results: '\*').    Example: Each of the followingDE-9IM string codes are valid for testing whether a polygon geometry completely contains a line geometry:`TTTFFTFFT` (Boolean), 'T\*\*\*\*\*FF\*' (ignore irrelevant intersections), or '102FF\*FF\*' (dimension form).Each returns the same result.    See [this article](https://en.wikipedia.org/wiki/DE-9IM) and[this ArcGIS help page](https://desktop.arcgis.com/en/arcmap/latest/manage-data/using-sql-with-gdbs/relational-functions-for-st-geometry.htm)for more information about the DE-9IM model and how string codes are constructed.
     *
     */
    relate(geometry1: Geometry, geometry2: Geometry, relation: string): IPromise<boolean>;
    /**
     * Rotates a geometry counterclockwise by the specified number of degrees.Rotation is around the centroid, or a given rotation point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#rotate)
     *
     * @param geometry The geometry to rotate.
     * @param angle The rotation angle in degrees.
     * @param rotationOrigin Point to rotate the geometry around. Defaults to the centroid of the geometry.
     *
     */
    rotate(geometry: Geometry, angle: number, rotationOrigin?: Point): IPromise<Geometry>;
    /**
     * Performs the simplify operation on the geometry which alters the given geometries to make their definitionstopologically legal with respect to their geometry type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#simplify)
     *
     * @param geometry The geometry to be simplified.
     *
     */
    simplify(geometry: Geometry): IPromise<Geometry>;
    /**
     * Creates the symmetric difference of two geometries. The symmetric difference includes the partsthat are in either of the sets, but not in both.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#symmetricDifference)
     *
     * @param leftGeometry One of the Geometry instances in the XOR operation.
     * @param rightGeometry One of the Geometry instances in the XOR operation.
     *
     */
    symmetricDifference(leftGeometry: Geometry | Geometry[], rightGeometry: Geometry): IPromise<Geometry | Geometry[]>;
    /**
     * Indicates if one geometry touches another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#touches)
     *
     * @param geometry1 The geometry to test the "touches" relationship with the other geometry.
     * @param geometry2 The geometry to be touched.
     *
     */
    touches(geometry1: Geometry, geometry2: Geometry): IPromise<boolean>;
    /**
     * All inputs must be of the same type of geometries and share one spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#union)
     *
     * @param geometries An array of Geometries to union.
     *
     */
    union(geometries: Geometry[]): IPromise<Geometry>;
    /**
     * Indicates if one geometry is within another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#within)
     *
     * @param innerGeometry The base geometry that is tested for the "within" relationship to the other geometry.
     * @param outerGeometry The comparison geometry that is tested for the "contains" relationship to the other geometry.
     *
     */
    within(innerGeometry: Geometry, outerGeometry: Geometry): IPromise<boolean>;
  }

  export const geometryEngineAsync: geometryEngineAsync;

  interface HeightModelInfo extends Accessor, JSONSupport {
    /**
     * The surface type or height model of the vertical coordinate system (VCS). A[SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) will only render layers containing data thatis compatible with the HeightModelInfo of the scene.Value | Description------|------------gravity-related-height | A gravity-related VCS may set its zero point through a local mean sea level or a benchmark, and is compatible with other gravity-related VCS for the purposes of rendering.ellipsoidal | An ellipsoidal VCS defines heights that are referenced to an ellipsoid of a geographic coordinate system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-HeightModelInfo.html#heightModel)
     *
     * @default "gravity-related-height"
     */
    readonly heightModel: string;
    /**
     * The unit of the vertical coordinate system. A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html)will use this property to check that the vertical data of layers thatdefine a HeightModelInfo is compatible with the view.**Possible Values:** meters | feet | us-feet | clarke-feet | clarke-yards | clarke-links | sears-yards |sears-feet | sears-chains | benoit-1895-b-chains | indian-yards | indian-1937-yards | gold-coast-feet |sears-1922-truncated-chains | 50-kilometers | 150-kilometers
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-HeightModelInfo.html#heightUnit)
     *
     * @default "meters"
     */
    readonly heightUnit: string;
    /**
     * The datum realization of the vertical coordinate system. A[SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) will only render layers that define aHeightModelInfo with an identical `vertCRS` to that of the scene,when using an `ellipsoidal` height model.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-HeightModelInfo.html#vertCRS)
     */
    readonly vertCRS: string;
  }

  interface HeightModelInfoConstructor {
    new (properties?: HeightModelInfoProperties): HeightModelInfo;

    fromJSON(json: any): HeightModelInfo;
  }

  export const HeightModelInfo: HeightModelInfoConstructor;

  interface HeightModelInfoProperties {
    /**
     * The surface type or height model of the vertical coordinate system (VCS). A[SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) will only render layers containing data thatis compatible with the HeightModelInfo of the scene.Value | Description------|------------gravity-related-height | A gravity-related VCS may set its zero point through a local mean sea level or a benchmark, and is compatible with other gravity-related VCS for the purposes of rendering.ellipsoidal | An ellipsoidal VCS defines heights that are referenced to an ellipsoid of a geographic coordinate system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-HeightModelInfo.html#heightModel)
     *
     * @default "gravity-related-height"
     */
    heightModel?: string;
    /**
     * The unit of the vertical coordinate system. A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html)will use this property to check that the vertical data of layers thatdefine a HeightModelInfo is compatible with the view.**Possible Values:** meters | feet | us-feet | clarke-feet | clarke-yards | clarke-links | sears-yards |sears-feet | sears-chains | benoit-1895-b-chains | indian-yards | indian-1937-yards | gold-coast-feet |sears-1922-truncated-chains | 50-kilometers | 150-kilometers
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-HeightModelInfo.html#heightUnit)
     *
     * @default "meters"
     */
    heightUnit?: string;
    /**
     * The datum realization of the vertical coordinate system. A[SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) will only render layers that define aHeightModelInfo with an identical `vertCRS` to that of the scene,when using an `ellipsoidal` height model.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-HeightModelInfo.html#vertCRS)
     */
    vertCRS?: string;
  }

  interface Mesh extends Geometry {
    /**
     * An array of mesh components that can be used to apply materialsto different regions of the same mesh. There are three commonusage patterns for components.1. **Specify a material for the whole mesh.** In this case, use a single   component with only a material (leaving faces as `null`).2. **Reuse vertex attributes.** When modeling continuous surfaces,   it can be convenient to only specify vertices once and then   simply refer to them. In this case, use a single component   with faces set to index the vertex attributes that form   triangles.3. **Specify multiple materials for the same mesh.** In this case,   use multiple components with faces that determine to which region   of the mesh the material of the component applies.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#components)
     */
    components: MeshComponent[];
    /**
     * For Mesh, the type is always `mesh`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#type)
     */
    readonly type: "mesh";
    /**
     * Object describing the attributes of each vertex of the mesh. Vertex attributesare flat numerical arrays that describe the position (mandatory), normal (used forlighting calculations and shading) and uv (used for mapping material images to themesh surface) for each vertex.Vertex attributes can be addressed by indices specified in the components[faces](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshComponent.html#faces) property. If themesh does not contain any components, or if a component does not specify any faces,then the vertex attributes are interpreted as if each consecutive vertex triplemakes up a triangle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes)
     */
    vertexAttributes: MeshVertexAttributes;

    /**
     * Adds a component to the mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#addComponent)
     *
     * @param component The component to add.
     *
     */
    addComponent(component: MeshComponent | MeshComponentProperties): void;
    /**
     * Centers the mesh at the specified location without changing its scale.The mesh will be modified in place. To modify a copy of the mesh instead, use [clone()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#clone)before calling [centerAt()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#centerAt).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#centerAt)
     *
     * @param location The location at which to center the mesh.
     * @param params Additional parameters.
     * @param params.geographic Indicates whether to georeference relative to the globe or the  projected coordinate system (PCS). This parameter is only relevant for spatial references that can  be used in both local and global viewing modes (currently only WebMercator). This parameter  defaults to `true` for WebMercator and WGS84, and `false` for any other PCS. When true,  the offset applied to center the mesh is applied in a Cartesian system with respect to the local  coordinate system on the globe and is specified in meters.
     * @param params.origin The origin at which to center. If not specified,  the mesh will be centered at the mesh extent center.
     *
     */
    centerAt(location: Point, params?: MeshCenterAtParams): Mesh;
    /**
     * Creates a deep clone of the Mesh object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#clone)
     *
     *
     */
    clone(): Mesh;
    /**
     * Offsets the mesh geometry by the specified distance in x, y, and z. The units of x, y, and z are theunits of the spatial reference. When the offset is applied geographically (default for either WGS84or WebMercator), then the offsets are interpreted in meters.The mesh will be modified in place. To modify a copy of the mesh instead, use [clone()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#clone)before calling [offset()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#offset).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#offset)
     *
     * @param dx The amount to offset the geometry in the x direction.
     * @param dy The amount to offset the geometry in the y direction.
     * @param dz The amount to offset the geometry in the z direction.
     * @param params Additional parameters.
     * @param params.geographic Whether to georeference relative to the globe or the  projected coordinate system (PCS). This parameter is only relevant for spatial references that can  be used in both local and global viewing modes (currently only WebMercator). This parameter  defaults to `true` for WebMercator and WGS84, and `false` for any other PCS. When true,  the offset is applied in a Cartesian system with respect to the local  coordinate system on the globe and is specified in meters.
     *
     */
    offset(dx: number, dy: number, dz: number, params?: MeshOffsetParams): Mesh;
    /**
     * Removes a component from the mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#removeComponent)
     *
     * @param component The component to remove.
     *
     */
    removeComponent(component: MeshComponent): void;
    /**
     * Rotates the mesh geometry around its x, y and z axis (in that order). For each rotation angle,the rotation direction is clockwise when looking in the direction of the respective axis.The mesh will be modified in place. To modify a copy of the mesh instead, use [clone()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#clone)before calling [rotate()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#rotate).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#rotate)
     *
     * @param angleX The angle by which to rotate around the x-axis (in degrees).
     * @param angleY The angle by which to rotate around the y-axis (in degrees).
     * @param angleZ The angle by which to rotate around the z-axis (in degrees).
     * @param params Additional parameters.
     * @param params.geographic Whether to georeference relative to the globe or the  projected coordinate system (PCS). This parameter is only relevant for spatial references that can  be used in both local and global viewing modes (currently only WebMercator). This parameter  defaults to `true` for WebMercator and WGS84, and `false` for any other PCS. When true,  the rotation is applied in a Cartesian system with respect to the local  coordinate system on the globe and is specified in meters.
     * @param params.origin The origin around which to rotate. If not specified, the mesh will  be rotated around the mesh extent center.
     *
     */
    rotate(angleX: number, angleY: number, angleZ: number, params?: MeshRotateParams): Mesh;
    /**
     * Scales the mesh geometry by the specified factor. The mesh will be modified in place.To modify a copy of the mesh instead, use [clone()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#clone) before calling [scale()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#scale).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#scale)
     *
     * @param factor The amount to scale the geometry.
     * @param params Additional parameters.
     * @param params.geographic Whether to georeference relative to the globe or the  projected coordinate system (PCS). This parameter is only relevant for spatial references that can  be used in both local and global viewing modes (currently only WebMercator). This parameter  defaults to `true` for WebMercator and WGS84, and `false` for any other PCS. When true,  the offset is applied in a Cartesian system with respect to the local  coordinate system on the globe and is specified in meters.
     * @param params.origin The origin point for scaling. If not specified, the mesh will  be scaled around the mesh extent center.
     *
     */
    scale(factor: number, params?: MeshScaleParams): Mesh;
    /**
     * Notifies that any cached values that depend on vertex attributes need to be recalculated. Use thismethod after modifying the vertex attributes in place so that values that depend on them (such asthe calculation of the extent) are recalculated accordingly.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributesChanged)
     *
     *
     */
    vertexAttributesChanged(): void;
  }

  interface MeshConstructor {
    new (properties?: MeshProperties): Mesh;

    /**
     * Creates a mesh representing a box. The spatial reference of the resulting mesh is the sameas the location where it is placed.#### Box UV coordinate spaceThe box geometry will have UV coordinates generated according to the following scheme:<img src="../../assets/img/apiref/geometry/mesh-box-uv.png" width="300" height="300"/>
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createBox)
     *
     * @param location The location bottom center of the box.
     * @param params Additional parameters.
     * @param params.size A uniform size value or an object containing individual  values width, height and depth. The unit of the size values is derived from the spatial reference  of the provided location, unless a unit is specified.
     * @param params.geographic Whether to georeference relative to the globe or the  projected coordinate system (PCS). This parameter is only relevant for spatial references that can  be used in both local and global viewing modes (currently only WebMercator). This parameter  defaults to `true` for WebMercator and WGS84, and `false` for any other PCS. When true,  the mesh is created in a Cartesian system with respect to the local  coordinate system on the globe and sizes are specified in meters.
     * @param params.unit The unit of the size (defaults to the unit of the location's spatial reference).**Possible Values:** millimeters | centimeters | decimeters | meters | kilometers | inches | feet | yards | miles | nautical-miles | us-feet
     * @param params.material The material to be used for the mesh.
     * @param params.imageFace The face for generating image uv coordinates. By default, a single set of unwrapped  UV coordinates are generated for all the faces. By setting the `imageFace` parameter to one of `east`, `west`,  `north`, `south`, `up` or `down`, the specified face will have full sized UV coordinates while the other faces  will pertain their regular unwrapped UV coordinates. This is useful for applying an image only to a single face of the box.  The provided `material` parameter will be applied to the specified `imageFace`. The resulting mesh will have two components,  the first contains the selected image face and the second contains the other faces of the box.
     *
     */
    createBox(location: Point, params?: MeshCreateBoxParams): Mesh;
    /**
     * Creates a mesh representing a cylinder. The spatial reference of the resulting mesh is the sameas the location where it is placed.#### Cylinder UV coordinate spaceThe cylinder geometry will have UV coordinates generated according to the following scheme(example is shown for 8 vertices cylinder):<img src="../../assets/img/apiref/geometry/mesh-cylinder-uv.png" width="300" height="300"/>
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createCylinder)
     *
     * @param location The location of the bottom center of the cylinder.
     * @param params Additional parameters.
     * @param params.size A uniform size value or an object containing individual  values width, height and depth. The unit of the size values is derived from the spatial reference  of the provided location, unless a specific unit is specified.
     * @param params.geographic Whether to georeference relative to the globe or the  projected coordinate system (PCS). This parameter is only relevant for spatial references that can  be used in both local and global viewing modes (currently only WebMercator). This parameter  defaults to `true` for WebMercator and WGS84, and `false` for any other PCS. When true,  the mesh is created in a Cartesian system with respect to the local  coordinate system on the globe and sizes are specified in meters.
     * @param params.unit The unit of the size (defaults to the unit of the location's spatial reference).**Possible Values:** millimeters | centimeters | decimeters | meters | kilometers | inches | feet | yards | miles | nautical-miles | us-feet
     * @param params.densificationFactor The additional number of subdivisions for generating  the mesh representing a cylinder. A densificationFactor parameter of 0 will generate a default of  16 vertices to approximate the cylinder. A densificationFactor of 1 will generate 32 vertices, etc. The larger the  densificationFactor, the better the mesh will approximate a perfect cylinder (at the cost of processing  and rendering performance).
     * @param params.material The material to be used for the mesh.
     *
     */
    createCylinder(location: Point, params?: MeshCreateCylinderParams): Mesh;
    /**
     * Creates a new mesh geometry from a glTF model referenced by the `url` parameter. The spatial reference of the resulting mesh is the sameas the `location` parameter. For more information on the supported glTF features you can read the [Visualizing points with 3D symbols](https://developers.arcgis.com/javascript/latest/guide/visualizing-points-3d/index.html)guide topic. Animations are currently not supported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createFromGLTF)
     *
     * @param location The location of the origin of the model. If the location doesn't contain a z value,z is assumed to be `0`.
     * @param url The URL of the glTF model. The URL should point to a glTF file (.gltf or .glb)which can reference additional binary (.bin) and image files (.jpg, .png).
     * @param params Additional parameters.
     * @param params.geographic Whether the model coordinates should be relative to the geographic or the  projected coordinate system (PCS). This parameter is only relevant for spatial references that can  be used in both local and global viewing modes (currently only WebMercator). This parameter  defaults to `true` for WebMercator and WGS84, and `false` for any other PCS. When true,  the mesh is created in a Cartesian system with respect to the local  coordinate system on the globe and sizes are specified in meters.
     * @param params.signal An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the loading process.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     */
    createFromGLTF(location: Point, url: string, params?: MeshCreateFromGLTFParams): IPromise<Mesh>;
    /**
     * Creates a new mesh geometry from a polygon geometry. The resulting mesh contains onlya position vertex attribute and a single component with faces. The default shading will beset to `flat`. The spatial reference of the resulting mesh is the sameas the input polygon. The resulting mesh will not contain any uv nor normal vertex attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createFromPolygon)
     *
     * @param polygon The input polygon.
     * @param params Optional parameters.
     * @param params.material The material to be used for the mesh.
     *
     */
    createFromPolygon(polygon: Polygon, params?: MeshCreateFromPolygonParams): Mesh;
    /**
     * Creates a mesh representing a plane. The spatial reference of the resulting mesh is the sameas the location where it is placed. A plane consists of two triangles and may be convenientlyoriented at creation time.#### Plane UV coordinate spaceThe plane geometry will have UV coordinates generated according to the following scheme:<img src="../../assets/img/apiref/geometry/mesh-plane-uv.png" width="300" height="300"/>
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createPlane)
     *
     * @param location The location of the bottom center of the plane.
     * @param params Additional parameters.
     * @param params.size A uniform size value or an object containing individual  values width and height. The unit of the size values is derived from the spatial reference  of the provided location, unless a unit is specified.
     * @param params.facing Direction the plane is facing. Possible values are `east`, `west`, `north`, `south`, `up` and `down`. Defaults to `up`,
     * @param params.geographic Whether to georeference relative to the globe or the  projected coordinate system (PCS). This parameter is only relevant for spatial references that can  be used in both local and global viewing modes (currently only WebMercator). This parameter  defaults to `true` for WebMercator and WGS84, and `false` for any other PCS. When true,  the mesh is created in a Cartesian system with respect to the local  coordinate system on the globe and sizes are specified in meters.
     * @param params.unit The unit of the size (defaults to the unit of the location's spatial reference).**Possible Values:** millimeters | centimeters | decimeters | meters | kilometers | inches | feet | yards | miles | nautical-miles | us-feet
     * @param params.material The material to be used for the mesh.
     *
     */
    createPlane(location: Point, params?: MeshCreatePlaneParams): Mesh;
    /**
     * Creates a mesh representing a sphere. The spatial reference of the resulting mesh is the sameas the location where it is placed.#### Sphere UV coordinate spaceThe sphere geometry will have UV coordinates generated according to the following scheme(example is shown for 8x8 vertices sphere):<img src="../../assets/img/apiref/geometry/mesh-sphere-uv.png" width="300" height="300"/>
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createSphere)
     *
     * @param location The location of the bottom center of the sphere.
     * @param params Additional parameters.
     * @param params.size A uniform size value or an object containing individual  values width, height and depth. The unit of the size values is derived from the spatial reference  of the provided location, unless a unit is specified.
     * @param params.geographic Indicates whether to georeference relative to the globe or the  projected coordinate system (PCS). This parameter is only relevant for spatial references that can  be used in both local and global viewing modes (currently only WebMercator). This parameter  defaults to `true` for WebMercator and WGS84, and `false` for any other PCS. When true,  the mesh is created in a Cartesian system with respect to the local  coordinate system on the globe and sizes are specified in meters.
     * @param params.unit The unit of the size (defaults to the unit of the location's spatial reference).**Possible Values:** millimeters | centimeters | decimeters | meters | kilometers | inches | feet | yards | miles | nautical-miles | us-feet
     * @param params.densificationFactor The additional number of subdivisions for generating  the mesh representing a sphere. A densificationFactor parameter of 0 will generate a default of  16-by-16 vertices to approximate the sphere. A densificationFactor of 1 will generate 32-by-32 vertices, etc.  The larger the densificationFactor, the better the mesh will approximate a perfect sphere (at the cost of  processing and rendering performance).
     * @param params.material The material to be used for the mesh.
     *
     */
    createSphere(location: Point, params?: MeshCreateSphereParams): Mesh;

    fromJSON(json: any): Mesh;
  }

  export const Mesh: MeshConstructor;

  interface MeshProperties extends GeometryProperties {
    /**
     * An array of mesh components that can be used to apply materialsto different regions of the same mesh. There are three commonusage patterns for components.1. **Specify a material for the whole mesh.** In this case, use a single   component with only a material (leaving faces as `null`).2. **Reuse vertex attributes.** When modeling continuous surfaces,   it can be convenient to only specify vertices once and then   simply refer to them. In this case, use a single component   with faces set to index the vertex attributes that form   triangles.3. **Specify multiple materials for the same mesh.** In this case,   use multiple components with faces that determine to which region   of the mesh the material of the component applies.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#components)
     */
    components?: MeshComponentProperties[];
    /**
     * Object describing the attributes of each vertex of the mesh. Vertex attributesare flat numerical arrays that describe the position (mandatory), normal (used forlighting calculations and shading) and uv (used for mapping material images to themesh surface) for each vertex.Vertex attributes can be addressed by indices specified in the components[faces](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshComponent.html#faces) property. If themesh does not contain any components, or if a component does not specify any faces,then the vertex attributes are interpreted as if each consecutive vertex triplemakes up a triangle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes)
     */
    vertexAttributes?: MeshVertexAttributesProperties;
  }

  export interface MeshCenterAtParams extends Object {
    /**
     * Indicates whether to georeference relative to the globe or the  projected coordinate system (PCS). This parameter is only relevant for spatial references that can  be used in both local and global viewing modes (currently only WebMercator). This parameter  defaults to `true` for WebMercator and WGS84, and `false` for any other PCS. When true,  the offset applied to center the mesh is applied in a Cartesian system with respect to the local  coordinate system on the globe and is specified in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#centerAt)
     */
    geographic?: boolean;
    /**
     * The origin at which to center. If not specified,  the mesh will be centered at the mesh extent center.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#centerAt)
     */
    origin?: Point;
  }

  export interface MeshCreateBoxParams extends Object {
    /**
     * A uniform size value or an object containing individual  values width, height and depth. The unit of the size values is derived from the spatial reference  of the provided location, unless a unit is specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createBox)
     */
    size?: number | MeshCreateBoxParamsSize;
    /**
     * Whether to georeference relative to the globe or the  projected coordinate system (PCS). This parameter is only relevant for spatial references that can  be used in both local and global viewing modes (currently only WebMercator). This parameter  defaults to `true` for WebMercator and WGS84, and `false` for any other PCS. When true,  the mesh is created in a Cartesian system with respect to the local  coordinate system on the globe and sizes are specified in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createBox)
     */
    geographic?: boolean;
    /**
     * The unit of the size (defaults to the unit of the location's spatial reference).**Possible Values:** millimeters | centimeters | decimeters | meters | kilometers | inches | feet | yards | miles | nautical-miles | us-feet
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createBox)
     */
    unit?: string;
    /**
     * The material to be used for the mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createBox)
     */
    material?: MeshMaterial;
    /**
     * The face for generating image uv coordinates. By default, a single set of unwrapped  UV coordinates are generated for all the faces. By setting the `imageFace` parameter to one of `east`, `west`,  `north`, `south`, `up` or `down`, the specified face will have full sized UV coordinates while the other faces  will pertain their regular unwrapped UV coordinates. This is useful for applying an image only to a single face of the box.  The provided `material` parameter will be applied to the specified `imageFace`. The resulting mesh will have two components,  the first contains the selected image face and the second contains the other faces of the box.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createBox)
     */
    imageFace?: string;
  }

  export interface MeshCreateBoxParamsSize extends Object {
    /**
     * The width of the created mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createBox)
     */
    width?: number;
    /**
     * The depth of the created mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createBox)
     */
    depth?: number;
    /**
     * The height of the created mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createBox)
     */
    height?: number;
  }

  export interface MeshCreateCylinderParams extends Object {
    /**
     * A uniform size value or an object containing individual  values width, height and depth. The unit of the size values is derived from the spatial reference  of the provided location, unless a specific unit is specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createCylinder)
     */
    size?: number | MeshCreateCylinderParamsSize;
    /**
     * Whether to georeference relative to the globe or the  projected coordinate system (PCS). This parameter is only relevant for spatial references that can  be used in both local and global viewing modes (currently only WebMercator). This parameter  defaults to `true` for WebMercator and WGS84, and `false` for any other PCS. When true,  the mesh is created in a Cartesian system with respect to the local  coordinate system on the globe and sizes are specified in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createCylinder)
     */
    geographic?: boolean;
    /**
     * The unit of the size (defaults to the unit of the location's spatial reference).**Possible Values:** millimeters | centimeters | decimeters | meters | kilometers | inches | feet | yards | miles | nautical-miles | us-feet
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createCylinder)
     */
    unit?: string;
    /**
     * The additional number of subdivisions for generating  the mesh representing a cylinder. A densificationFactor parameter of 0 will generate a default of  16 vertices to approximate the cylinder. A densificationFactor of 1 will generate 32 vertices, etc. The larger the  densificationFactor, the better the mesh will approximate a perfect cylinder (at the cost of processing  and rendering performance).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createCylinder)
     */
    densificationFactor?: number;
    /**
     * The material to be used for the mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createCylinder)
     */
    material?: MeshMaterial;
  }

  export interface MeshCreateCylinderParamsSize extends Object {
    /**
     * The width of the created mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createCylinder)
     */
    width?: number;
    /**
     * The depth of the created mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createCylinder)
     */
    depth?: number;
    /**
     * The height of the created mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createCylinder)
     */
    height?: number;
  }

  export interface MeshCreateFromGLTFParams extends Object {
    /**
     * Whether the model coordinates should be relative to the geographic or the  projected coordinate system (PCS). This parameter is only relevant for spatial references that can  be used in both local and global viewing modes (currently only WebMercator). This parameter  defaults to `true` for WebMercator and WGS84, and `false` for any other PCS. When true,  the mesh is created in a Cartesian system with respect to the local  coordinate system on the globe and sizes are specified in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createFromGLTF)
     */
    geographic?: boolean;
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the loading process.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createFromGLTF)
     */
    signal?: AbortSignal;
  }

  export interface MeshCreateFromPolygonParams extends Object {
    /**
     * The material to be used for the mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createFromPolygon)
     */
    material?: MeshMaterial;
  }

  export interface MeshCreatePlaneParams extends Object {
    /**
     * A uniform size value or an object containing individual  values width and height. The unit of the size values is derived from the spatial reference  of the provided location, unless a unit is specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createPlane)
     */
    size?: number | MeshCreatePlaneParamsSize;
    /**
     * Direction the plane is facing. Possible values are `east`, `west`, `north`, `south`, `up` and `down`. Defaults to `up`,
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createPlane)
     */
    facing?: string;
    /**
     * Whether to georeference relative to the globe or the  projected coordinate system (PCS). This parameter is only relevant for spatial references that can  be used in both local and global viewing modes (currently only WebMercator). This parameter  defaults to `true` for WebMercator and WGS84, and `false` for any other PCS. When true,  the mesh is created in a Cartesian system with respect to the local  coordinate system on the globe and sizes are specified in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createPlane)
     */
    geographic?: boolean;
    /**
     * The unit of the size (defaults to the unit of the location's spatial reference).**Possible Values:** millimeters | centimeters | decimeters | meters | kilometers | inches | feet | yards | miles | nautical-miles | us-feet
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createPlane)
     */
    unit?: string;
    /**
     * The material to be used for the mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createPlane)
     */
    material?: MeshMaterial;
  }

  export interface MeshCreatePlaneParamsSize extends Object {
    /**
     * The width of the created mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createPlane)
     */
    width?: number;
    /**
     * The height of the created mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createPlane)
     */
    height?: number;
  }

  export interface MeshCreateSphereParams extends Object {
    /**
     * A uniform size value or an object containing individual  values width, height and depth. The unit of the size values is derived from the spatial reference  of the provided location, unless a unit is specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createSphere)
     */
    size?: number | MeshCreateSphereParamsSize;
    /**
     * Indicates whether to georeference relative to the globe or the  projected coordinate system (PCS). This parameter is only relevant for spatial references that can  be used in both local and global viewing modes (currently only WebMercator). This parameter  defaults to `true` for WebMercator and WGS84, and `false` for any other PCS. When true,  the mesh is created in a Cartesian system with respect to the local  coordinate system on the globe and sizes are specified in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createSphere)
     */
    geographic?: boolean;
    /**
     * The unit of the size (defaults to the unit of the location's spatial reference).**Possible Values:** millimeters | centimeters | decimeters | meters | kilometers | inches | feet | yards | miles | nautical-miles | us-feet
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createSphere)
     */
    unit?: string;
    /**
     * The additional number of subdivisions for generating  the mesh representing a sphere. A densificationFactor parameter of 0 will generate a default of  16-by-16 vertices to approximate the sphere. A densificationFactor of 1 will generate 32-by-32 vertices, etc.  The larger the densificationFactor, the better the mesh will approximate a perfect sphere (at the cost of  processing and rendering performance).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createSphere)
     */
    densificationFactor?: number;
    /**
     * The material to be used for the mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createSphere)
     */
    material?: MeshMaterial;
  }

  export interface MeshCreateSphereParamsSize extends Object {
    /**
     * The width of the created mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createSphere)
     */
    width?: number;
    /**
     * The depth of the created mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createSphere)
     */
    depth?: number;
    /**
     * The height of the created mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createSphere)
     */
    height?: number;
  }

  export interface MeshOffsetParams extends Object {
    /**
     * Whether to georeference relative to the globe or the  projected coordinate system (PCS). This parameter is only relevant for spatial references that can  be used in both local and global viewing modes (currently only WebMercator). This parameter  defaults to `true` for WebMercator and WGS84, and `false` for any other PCS. When true,  the offset is applied in a Cartesian system with respect to the local  coordinate system on the globe and is specified in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#offset)
     */
    geographic?: boolean;
  }

  export interface MeshRotateParams extends Object {
    /**
     * Whether to georeference relative to the globe or the  projected coordinate system (PCS). This parameter is only relevant for spatial references that can  be used in both local and global viewing modes (currently only WebMercator). This parameter  defaults to `true` for WebMercator and WGS84, and `false` for any other PCS. When true,  the rotation is applied in a Cartesian system with respect to the local  coordinate system on the globe and is specified in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#rotate)
     */
    geographic?: boolean;
    /**
     * The origin around which to rotate. If not specified, the mesh will  be rotated around the mesh extent center.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#rotate)
     */
    origin?: Point;
  }

  export interface MeshScaleParams extends Object {
    /**
     * Whether to georeference relative to the globe or the  projected coordinate system (PCS). This parameter is only relevant for spatial references that can  be used in both local and global viewing modes (currently only WebMercator). This parameter  defaults to `true` for WebMercator and WGS84, and `false` for any other PCS. When true,  the offset is applied in a Cartesian system with respect to the local  coordinate system on the globe and is specified in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#scale)
     */
    geographic?: boolean;
    /**
     * The origin point for scaling. If not specified, the mesh will  be scaled around the mesh extent center.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#scale)
     */
    origin?: Point;
  }

  export interface MeshVertexAttributesProperties extends Object {
    /**
     * A flat array of vertex positions. Vertex positions have x, y and z coordinates and they should be in the spatial reference system of the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes)
     */
    position?: Float64Array | number[] | Float32Array;
    /**
     * A flat array of vertex uv coordinates (2 elements per vertex).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes)
     */
    uv?: Float32Array | number[] | Float64Array;
    /**
     * A flat array of the vertex normals (3 elements per vertex ranging from -1 to 1).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes)
     */
    normal?: Float32Array | number[] | Float64Array;
    /**
     * **Since: 4.9**    A flat array of the vertex colors (4 elements per vertex ranging from 0 to 255).  Vertex colors are multiplied by the component material color (if any is defined).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes)
     */
    color?: Uint8Array | number[] | Uint8ClampedArray;
  }

  export interface MeshVertexAttributes extends AnonymousAccessor {
    /**
     * A flat array of vertex positions. Vertex positions have x, y and z coordinates and they should be in the spatial reference system of the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes)
     */
    position: Float64Array;
    /**
     * A flat array of vertex uv coordinates (2 elements per vertex).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes)
     */
    uv?: Float32Array;
    /**
     * A flat array of the vertex normals (3 elements per vertex ranging from -1 to 1).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes)
     */
    normal?: Float32Array;
    /**
     * **Since: 4.9**    A flat array of the vertex colors (4 elements per vertex ranging from 0 to 255).  Vertex colors are multiplied by the component material color (if any is defined).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes)
     */
    color?: Uint8Array;
  }

  interface Multipoint extends Geometry {
    /**
     * An array of points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html#points)
     */
    points: number[][];
    /**
     * For Multipoint, the type is always `multipoint`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html#type)
     */
    readonly type: "multipoint";

    /**
     * Adds a point to the Multipoint.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html#addPoint)
     *
     * @param point The point to add to the multipoint. The point can either be a [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) or                                           an array of numbers representing XY coordinates.
     *
     */
    addPoint(point: Point | number[]): Multipoint;
    /**
     * Creates a deep clone of Multipoint object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html#clone)
     *
     *
     */
    clone(): Multipoint;
    /**
     * Returns the point at the specified index.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html#getPoint)
     *
     * @param index The index of the point in the [points](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html#points) property.
     *
     */
    getPoint(index: number): Point;
    /**
     * Removes a point from the Multipoint. The index specifies which point to remove.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html#removePoint)
     *
     * @param index The index of the point to remove.
     *
     */
    removePoint(index: number): Point;
    /**
     * Updates the point at the specified index.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html#setPoint)
     *
     * @param index The index of the point in the [points](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html#points) property.
     * @param point Point geometry that specifies the new location.
     *
     */
    setPoint(index: number, point: Point): Multipoint;
  }

  interface MultipointConstructor {
    new (properties?: MultipointProperties): Multipoint;

    fromJSON(json: any): Multipoint;
  }

  export const Multipoint: MultipointConstructor;

  interface MultipointProperties extends GeometryProperties {
    /**
     * An array of points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html#points)
     */
    points?: number[][];
  }

  interface Point extends Geometry {
    /**
     * The latitude of the point. If the spatial reference is Web Mercator, the latitude will be given in WGS84. In anygeographic spatial reference, the latitude will equal the [y](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#y) coordinate. In all other cases the latitudewill be null.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#latitude)
     */
    latitude: number;
    /**
     * The longitude of the point. If the spatial reference is Web Mercator, the longitude will be given in WGS84. In anygeographic spatial reference, the longitude will equal the [x](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#x) coordinate. In all other cases the longitudewill be null.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#longitude)
     */
    longitude: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#m)
     *
     * @default undefined
     */
    m: number;
    /**
     * For Point, the type is always `point`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#type)
     */
    readonly type: "point";
    /**
     * The x-coordinate (easting) of the point in map units.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#x)
     *
     * @default 0
     */
    x: number;
    /**
     * The y-coordinate (northing) of the point in map units.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#y)
     *
     * @default 0
     */
    y: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#z)
     *
     * @default undefined
     */
    z: number;

    /**
     * Creates a deep clone of Point object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#clone)
     *
     *
     */
    clone(): Point;
    /**
     * Copies all values from another Point instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#copy)
     *
     * @param other The point to copy from.
     *
     */
    copy(other: Point): void;
    /**
     * Computes the Euclidean distance between this Point and a given Point. Points must have the same spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#distance)
     *
     * @param other The point to compute the distance to.
     *
     */
    distance(other: Point): number;
    /**
     * Determines if the input point is equal to the point calling the function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#equals)
     *
     * @param point The input point to test.
     *
     */
    equals(point: Point): boolean;
    /**
     * Modifies the point geometry in-place by shifting the X-coordinate to within+/- 180 span in map units. You should [clone](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#clone)the point object before calling this method where appropriate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#normalize)
     *
     *
     */
    normalize(): Point;
  }

  interface PointConstructor {
    new (properties?: PointProperties): Point;

    fromJSON(json: any): Point;
  }

  export const Point: PointConstructor;

  interface PointProperties extends GeometryProperties {
    /**
     * The latitude of the point. If the spatial reference is Web Mercator, the latitude will be given in WGS84. In anygeographic spatial reference, the latitude will equal the [y](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#y) coordinate. In all other cases the latitudewill be null.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#latitude)
     */
    latitude?: number;
    /**
     * The longitude of the point. If the spatial reference is Web Mercator, the longitude will be given in WGS84. In anygeographic spatial reference, the longitude will equal the [x](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#x) coordinate. In all other cases the longitudewill be null.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#longitude)
     */
    longitude?: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#m)
     *
     * @default undefined
     */
    m?: number;
    /**
     * The x-coordinate (easting) of the point in map units.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#x)
     *
     * @default 0
     */
    x?: number;
    /**
     * The y-coordinate (northing) of the point in map units.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#y)
     *
     * @default 0
     */
    y?: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#z)
     *
     * @default undefined
     */
    z?: number;
  }

  interface Polygon extends Geometry {
    /**
     * The centroid of the polygon. For a polygon with multiple rings,it represents the centroid of the largest ring.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#centroid)
     */
    centroid: Point;
    /**
     * Checks to see if polygon rings cross each other and indicates if the polygon isself-intersecting, which means the ring of the polygon crosses itself.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#isSelfIntersecting)
     */
    isSelfIntersecting: boolean;
    /**
     * An array of rings. Each ring is a two-dimensional array of numbers representing the coordinates ofeach vertex in the ring in the spatial reference of the view. The first vertex of each ring should always bethe same as the last vertex. Each vertex is an array of two, three, or four numbers.The table below shows the various structures of a vertex array.Case | Vertex array--- | ---[without z](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#hasZ) and [without m](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#hasM)| [x, y][without z](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#hasZ) and [with m](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#hasM) | [x, y, m][with z](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#hasZ) and [without m](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#hasM) | [x, y, z][with z](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#hasZ) and [with m](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#hasM) | [x, y, z, m]
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#rings)
     */
    rings: number[][][];
    /**
     * For Polygon, the type is always `polygon`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#type)
     */
    readonly type: "polygon";

    /**
     * Adds a ring to the Polygon. The ring can be one of the following: an array of numbers or an array of points.When added the index of the ring is incremented by one.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#addRing)
     *
     * @param points A polygon ring. The first and last coordinates/points                                                          in the ring must be the same. This can either be defined as an array of                                                          Point geometries or an array of XY coordinates.
     *
     */
    addRing(points: Point[] | number[][]): Polygon;
    /**
     * Creates a deep clone of Polygon object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#clone)
     *
     *
     */
    clone(): Polygon;
    /**
     * Checks on the client if the input point is inside the polygon. A point on the polygon line is considered inside.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#contains)
     *
     * @param point The point to test whether it is contained within the testing polygon.
     *
     */
    contains(point: Point): boolean;
    /**
     * Returns a point specified by a ring and point in the path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#getPoint)
     *
     * @param ringIndex The index of the ring containing the desired point.
     * @param pointIndex The index of the desired point within the ring.
     *
     */
    getPoint(ringIndex: number, pointIndex: number): Point;
    /**
     * Inserts a new point into the polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#insertPoint)
     *
     * @param ringIndex The index of the ring in which to insert the point.
     * @param pointIndex The index of the point to insert within the ring.
     * @param point The point to insert.
     *
     */
    insertPoint(ringIndex: number, pointIndex: number, point: Point | number[]): Polygon;
    /**
     * Checks if a Polygon ring is clockwise.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#isClockwise)
     *
     * @param ring A polygon ring. The first and last coordinates/points                                                          in the ring must be the same. This can either be defined as an array of                                                          Point geometries or an array of XY coordinates.
     *
     */
    isClockwise(ring: Point[] | number[][]): boolean;
    /**
     * Removes a point from the polygon at the given `pointIndex` within the ring identified by `ringIndex`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#removePoint)
     *
     * @param ringIndex The index of the ring containing the point to remove.
     * @param pointIndex The index of the point to remove within the ring.
     *
     */
    removePoint(ringIndex: number, pointIndex: number): Point[];
    /**
     * Removes a ring from the Polygon. The index specifies which ring to remove.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#removeRing)
     *
     * @param index The index of the ring to remove.
     *
     */
    removeRing(index: number): Point[];
    /**
     * Updates a point in the polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#setPoint)
     *
     * @param ringIndex The index of the ring containing the point to update.
     * @param pointIndex The index of the point to update within the ring.
     * @param point The new point geometry.
     *
     */
    setPoint(ringIndex: number, pointIndex: number, point: Point | number[]): Polygon;
  }

  interface PolygonConstructor {
    new (properties?: PolygonProperties): Polygon;

    /**
     * Converts the given Extent to a Polygon instance. This is useful for scenarios in whichyou would like to display an area of interest, which is typically defined by an Extent or bounding box,as a polygon with a fill symbol in the view. Some geoprocessing tools require inputgeometries to be of a Polygon type and not an Extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#fromExtent)
     *
     * @param extent An extent object to convert to a polygon.
     *
     */
    fromExtent(extent: Extent): Polygon;

    fromJSON(json: any): Polygon;
  }

  export const Polygon: PolygonConstructor;

  interface PolygonProperties extends GeometryProperties {
    /**
     * The centroid of the polygon. For a polygon with multiple rings,it represents the centroid of the largest ring.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#centroid)
     */
    centroid?: PointProperties;
    /**
     * Checks to see if polygon rings cross each other and indicates if the polygon isself-intersecting, which means the ring of the polygon crosses itself.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#isSelfIntersecting)
     */
    isSelfIntersecting?: boolean;
    /**
     * An array of rings. Each ring is a two-dimensional array of numbers representing the coordinates ofeach vertex in the ring in the spatial reference of the view. The first vertex of each ring should always bethe same as the last vertex. Each vertex is an array of two, three, or four numbers.The table below shows the various structures of a vertex array.Case | Vertex array--- | ---[without z](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#hasZ) and [without m](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#hasM)| [x, y][without z](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#hasZ) and [with m](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#hasM) | [x, y, m][with z](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#hasZ) and [without m](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#hasM) | [x, y, z][with z](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#hasZ) and [with m](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#hasM) | [x, y, z, m]
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#rings)
     */
    rings?: number[][][];
  }

  interface Polyline extends Geometry {
    /**
     * An array of paths, or line segments, that make up the polyline. Each path is a two-dimensionalarray of numbers representing the coordinates of each vertex in the path in the spatial reference of the view.Each vertex is represented as an array of two, three, or four numbers.The table below shows the various structures of a vertex array.Case | Vertex array--- | ---[without z](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#hasZ) and [without m](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#hasM) | [x, y][without z](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#hasZ) and [with m](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#hasM) | [x, y, m][with z](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#hasZ) and [without m](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#hasM) | [x, y, z][with z](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#hasZ) and [with m](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#hasM) | [x, y, z, m]
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#paths)
     */
    paths: number[][][];
    /**
     * For Polyline, the type is always `polyline`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#type)
     */
    readonly type: "polyline";

    /**
     * Adds a path, or line segment, to the polyline. When added, the index of the path is incremented by one.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#addPath)
     *
     * @param points A polyline path. This can either be defined as an array of                             Point geometries or an array of XY coordinates.
     *
     */
    addPath(points: Point[] | number[][]): Polyline;
    /**
     * Creates a deep clone of Polyline object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#clone)
     *
     *
     */
    clone(): Polyline;
    /**
     * Returns a point specified by a path and point in the path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#getPoint)
     *
     * @param pathIndex The index of a path in the polyline.
     * @param pointIndex The index of a point in a path.
     *
     */
    getPoint(pathIndex: number, pointIndex: number): Point;
    /**
     * Inserts a new point into a polyline.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#insertPoint)
     *
     * @param pathIndex The index of the path in which to insert a point.
     * @param pointIndex The index of the inserted point in the path.
     * @param point The point to insert.
     *
     */
    insertPoint(pathIndex: number, pointIndex: number, point: Point | number[]): Polyline;
    /**
     * Removes a path from the Polyline. The index specifies which path to remove.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#removePath)
     *
     * @param index The index of the path to remove from the polyline.
     *
     */
    removePath(index: number): Point[];
    /**
     * Removes a point from the polyline at the given `pointIndex` within the path identified by the given `pathIndex`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#removePoint)
     *
     * @param pathIndex The index of the path containing the point to be removed.
     * @param pointIndex The index of the point to be removed within the path.
     *
     */
    removePoint(pathIndex: number, pointIndex: number): Point;
    /**
     * Updates a point in a polyline.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#setPoint)
     *
     * @param pathIndex The index of the path that contains the point to be updated.
     * @param pointIndex The index of the point to be updated in the path.
     * @param point Point geometry to update in the path.
     *
     */
    setPoint(pathIndex: number, pointIndex: number, point: Point | number[]): Polyline;
  }

  interface PolylineConstructor {
    new (properties?: PolylineProperties): Polyline;

    fromJSON(json: any): Polyline;
  }

  export const Polyline: PolylineConstructor;

  interface PolylineProperties extends GeometryProperties {
    /**
     * An array of paths, or line segments, that make up the polyline. Each path is a two-dimensionalarray of numbers representing the coordinates of each vertex in the path in the spatial reference of the view.Each vertex is represented as an array of two, three, or four numbers.The table below shows the various structures of a vertex array.Case | Vertex array--- | ---[without z](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#hasZ) and [without m](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#hasM) | [x, y][without z](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#hasZ) and [with m](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#hasM) | [x, y, m][with z](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#hasZ) and [without m](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#hasM) | [x, y, z][with z](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#hasZ) and [with m](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#hasM) | [x, y, z, m]
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#paths)
     */
    paths?: number[][][];
  }

  interface projection {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-projection.html#getTransformation)
     *
     * @param inSpatialReference The input spatial reference from which to project geometries.  This is the spatial reference of the input geometries.
     * @param outSpatialReference The spatial reference to which you are converting the geometries.
     * @param extent An extent used to determine the suitability of the returned transformation.The extent will be re-projected to the `inSpatialReference` if it has a different spatial reference.
     *
     */
    getTransformation(
      inSpatialReference: SpatialReference | SpatialReferenceProperties,
      outSpatialReference: SpatialReference | SpatialReferenceProperties,
      extent?: Extent
    ): GeographicTransformation;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-projection.html#getTransformations)
     *
     * @param inSpatialReference The spatial reference that the geometries are currently using.
     * @param outSpatialReference The spatial reference to which you are converting the geometries to.
     * @param extent An extent used to determine the suitability of the returned transformations.The extent will be re-projected to the input spatial reference if necessary.
     *
     */
    getTransformations(
      inSpatialReference: SpatialReference | SpatialReferenceProperties,
      outSpatialReference: SpatialReference | SpatialReferenceProperties,
      extent?: Extent
    ): GeographicTransformation[];
    /**
     * Indicates if all dependencies of this module have been loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-projection.html#isLoaded)
     *
     *
     */
    isLoaded(): boolean;
    /**
     * Indicates if this module is supported in the browser.The browser must support [WebAssembly](https://caniuse.com/#feat=wasm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-projection.html#isSupported)
     *
     *
     */
    isSupported(): boolean;
    /**
     * Loads this module's dependencies. This method must be called before [projecting](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-projection.html#project) geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-projection.html#load)
     *
     *
     */
    load(): IPromise<any>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-projection.html#project)
     *
     * @param geometry The geometry or geometries to project.
     * @param outSpatialReference The spatial reference to which you are converting the geometries' coordinates.
     * @param geographicTransformation The geographic transformation used totransform the geometries. Specify this parameter to project a geometry when the default transformation is not appropriate foryour requirements.
     *
     */
    project(
      geometry: Geometry | Geometry[],
      outSpatialReference: SpatialReference | SpatialReferenceProperties,
      geographicTransformation?: GeographicTransformation
    ): Geometry | Geometry[];
  }

  export const projection: projection;

  interface SpatialReference extends Accessor, JSONSupport {
    /**
     * Indicates if the spatial reference refers to a geographic coordinate system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isGeographic)
     */
    readonly isGeographic: boolean;
    /**
     * Indicates if the [wkid](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#wkid) of the spatial reference object is one of the following values:`102113`, `102100`, `3857`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isWebMercator)
     */
    readonly isWebMercator: boolean;
    /**
     * Indicates if the [wkid](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#wkid) of the spatial reference object is`4326`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isWGS84)
     */
    readonly isWGS84: boolean;
    /**
     * Indicates if the spatial reference of the map supports wrapping around the InternationalDate Line. Value is `true` if the spatial reference is Web Mercator or WGS84.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#isWrappable)
     */
    readonly isWrappable: boolean;
    /**
     * The well-known ID of a spatial reference. See [Projected Coordinate Systems](https://developers.arcgis.com/rest/services-reference/projected-coordinate-systems.htm) and[Geographic Coordinate Systems](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm)for the list of supported spatial references.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#wkid)
     */
    wkid: number;
    /**
     * The well-known text that defines a spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#wkt)
     */
    wkt: string;

    /**
     * Returns a deep clone of the spatial reference object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#clone)
     *
     *
     */
    clone(): SpatialReference;
    /**
     * Checks if the specified spatial reference object has the same [wkid](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#wkid) or[wkt](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#wkt) as this spatial reference object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#equals)
     *
     * @param spatialReference The spatial reference to compare to.
     *
     */
    equals(spatialReference: SpatialReference): boolean;
  }

  interface SpatialReferenceConstructor {
    new (properties?: SpatialReferenceProperties): SpatialReference;

    /**
     * A convenience spatial reference instance for Web Mercator.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#WebMercator)
     */
    WebMercator: SpatialReference;
    /**
     * A convenience spatial reference instance for WGS84.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#WGS84)
     */
    WGS84: SpatialReference;

    fromJSON(json: any): SpatialReference;
  }

  export const SpatialReference: SpatialReferenceConstructor;

  interface SpatialReferenceProperties {
    /**
     * The well-known ID of a spatial reference. See [Projected Coordinate Systems](https://developers.arcgis.com/rest/services-reference/projected-coordinate-systems.htm) and[Geographic Coordinate Systems](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm)for the list of supported spatial references.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#wkid)
     */
    wkid?: number;
    /**
     * The well-known text that defines a spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#wkt)
     */
    wkt?: string;
  }

  interface geodesicUtils {
    /**
     * Geodetically computes the area for one or more polygons.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-geodesicUtils.html#geodesicAreas)
     *
     * @param polygons The polygons to compute the area for.
     * @param unit Output area units.**Possible Values:** square-millimeters | square-centimeters | square-decimeters | square-meters | square-kilometers | square-inches | square-feet | square-yards | square-miles | square-us-feet | acres | ares | hectares
     *
     */
    geodesicAreas(polygons: Polygon[], unit?: string): number[];
    /**
     * Computes and returns a densified polyline or polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-geodesicUtils.html#geodesicDensify)
     *
     * @param geometry The input polyline or polygon.
     * @param maxSegmentLength The maximum length (in meters) between vertices.
     *
     */
    geodesicDensify(geometry: Polyline | Polygon, maxSegmentLength: number): Polyline | Polygon;
    /**
     * Geodetically computes the direction and distance between two known locations.Both input points must have the same geographic coordinate system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-geodesicUtils.html#geodesicDistance)
     *
     * @param from The origin location.
     * @param to The destination location.
     * @param unit Output linear units.**Possible Values:** millimeters | centimeters | decimeters | meters | kilometers | inches | feet | yards | miles | nautical-miles | us-feet
     *
     */
    geodesicDistance(from: Point, to: Point, unit?: string): GeodesicDistanceResult;
    /**
     * Geodetically computes polygon perimeter or polyline length for one or more geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-geodesicUtils.html#geodesicLengths)
     *
     * @param geometries The input polylines or polygons.
     * @param unit Output linear units.**Possible Values:** millimeters | centimeters | decimeters | meters | kilometers | inches | feet | yards | miles | nautical-miles | us-feet
     *
     */
    geodesicLengths(geometries: Polyline[] | Polygon[], unit?: string): number[];
    /**
     * Geodetically computes the location at a defined distance and direction from a known location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-geodesicUtils.html#pointFromDistance)
     *
     * @param point Origin location.
     * @param distance Distance from the origin in meters.
     * @param azimuth Direction from the origin in degrees.
     *
     */
    pointFromDistance(point: Point, distance: number, azimuth: number): Point;
  }

  export const geodesicUtils: geodesicUtils;

  /**
   * Computed distance and direction between two known locations.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-geodesicUtils.html#GeodesicDistanceResult)
   */
  export interface GeodesicDistanceResult extends Object {
    /**
     * The distance between the two locations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-geodesicUtils.html#GeodesicDistanceResult)
     */
    distance?: number;
    /**
     * The azimuth (or "bearing") in degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-geodesicUtils.html#GeodesicDistanceResult)
     */
    azimuth?: number;
    /**
     * The azimuth in degrees in the reverse direction.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-geodesicUtils.html#GeodesicDistanceResult)
     */
    reverseAzimuth?: number;
  }

  interface GeographicTransformation {
    /**
     * Geographic transformation steps. Each step represents a geographic transformation that will be used in theprocess of transforming coordinates from one geographic coordinate system to another.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-GeographicTransformation.html#steps)
     */
    steps: GeographicTransformationStep[];

    /**
     * Returns the inverse of the geographic transformation calling this method or `null` if the transformation is not invertible.The inverse of a transformation converts coordinates using the same method and parameters, but in the oppositedirection of the original object. For example if the original object represents the `NAD_1983_HARN_To_NAD_1983_NSRS2007_1`transformation, then the inverse will transform from `NAD 83 (NSRS 2007)` to `NAD 83 (HARN)`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-GeographicTransformation.html#getInverse)
     *
     *
     */
    getInverse(): GeographicTransformation;
  }

  interface GeographicTransformationConstructor {
    new (properties?: any): GeographicTransformation;
  }

  export const GeographicTransformation: GeographicTransformationConstructor;

  interface GeographicTransformationStep {
    /**
     * Indicates with the geographic transformation is inverted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-GeographicTransformationStep.html#isInverse)
     *
     * @default false
     */
    isInverse: boolean;
    /**
     * The well-known id (wkid) hat represents a known geographic transformation.See [Geographic datum transformations](https://developers.arcgis.com/java/10-2/guide/datum-transformations.htm#ESRI_SECTION1_7635FE2A60E6449898D5AD0ADE2CA0C3)for the list of supported equation-based geographic transformations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-GeographicTransformationStep.html#wkid)
     */
    wkid: number;
    /**
     * The well-known text (wkt) that represents a known geographic transformation.See [Geographic datum transformations](https://developers.arcgis.com/java/10-2/guide/datum-transformations.htm#ESRI_SECTION1_7635FE2A60E6449898D5AD0ADE2CA0C3)for the list of supported equation-based geographic transformations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-GeographicTransformationStep.html#wkt)
     */
    wkt: string;

    /**
     * Gets the inverse of the geographic transformation step used to call this method or `null` if the transformation step is not invertible.The inverse of a transformation converts coordinates using the same method and parameters, but in the oppositedirection of the original object. For example if the original object represents the `NAD_1983_HARN_To_NAD_1983_NSRS2007_1`transformation, then the inverse will transform from `NAD 83 (NSRS 2007)` to `NAD 83 (HARN)`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-GeographicTransformationStep.html#getInverse)
     *
     *
     */
    getInverse(): GeographicTransformationStep;
  }

  interface GeographicTransformationStepConstructor {
    new (properties?: any): GeographicTransformationStep;
  }

  export const GeographicTransformationStep: GeographicTransformationStepConstructor;

  interface ImageMeshColor extends Accessor {
    /**
     * A direct reference to the image data. The image data can be an[image element](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement),[canvas element](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement)or [ImageData](https://developer.mozilla.org/en-US/docs/Web/API/ImageData).The data property is mutually exclusive with the url property, setting the data will clear theurl (if there is one).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-ImageMeshColor.html#data)
     */
    data: HTMLImageElement | HTMLCanvasElement | ImageData;
    /**
     * Indicates whether the image data should be interpreted as being semi-transparent.The default value is automatically derived when the data property contains a canvaselement or an ImageData object. If instead a url to a .png file was provided, it isassumed that transparency is present. In all other cases it defaults to `false`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-ImageMeshColor.html#transparent)
     *
     * @default undefined
     */
    transparent: boolean;
    /**
     * For ImageMeshColor the type is always `image`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-ImageMeshColor.html#type)
     */
    readonly type: "image";
    /**
     * The url to the image resource. This can either be a remote url (absolute or relative) or a data url.The url property is mutually exclusive with the data property, setting the url will clear thedata (if there is one).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-ImageMeshColor.html#url)
     */
    url: string;

    /**
     * Creates a deep clone.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-ImageMeshColor.html#clone)
     *
     *
     */
    clone(): ImageMeshColor;
  }

  interface ImageMeshColorConstructor {
    new (properties?: ImageMeshColorProperties): ImageMeshColor;
  }

  export const ImageMeshColor: ImageMeshColorConstructor;

  interface ImageMeshColorProperties {
    /**
     * A direct reference to the image data. The image data can be an[image element](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement),[canvas element](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement)or [ImageData](https://developer.mozilla.org/en-US/docs/Web/API/ImageData).The data property is mutually exclusive with the url property, setting the data will clear theurl (if there is one).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-ImageMeshColor.html#data)
     */
    data?: HTMLImageElement | HTMLCanvasElement | ImageData;
    /**
     * Indicates whether the image data should be interpreted as being semi-transparent.The default value is automatically derived when the data property contains a canvaselement or an ImageData object. If instead a url to a .png file was provided, it isassumed that transparency is present. In all other cases it defaults to `false`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-ImageMeshColor.html#transparent)
     *
     * @default undefined
     */
    transparent?: boolean;
    /**
     * The url to the image resource. This can either be a remote url (absolute or relative) or a data url.The url property is mutually exclusive with the data property, setting the url will clear thedata (if there is one).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-ImageMeshColor.html#url)
     */
    url?: string;
  }

  interface jsonUtils {
    /**
     * Creates a new instance of an appropriate [Geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html) class and initializes it with values from a JSON objectgenerated from a product in the ArcGIS platform. The object passed into the input `json`parameter often comes from a response to a query operation in the REST API or a[toJSON()](http://pro.arcgis.com/en/pro-app/tool-reference/conversion/features-to-json.htm)method from another ArcGIS product. See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html)topic in the Guide for details and examples of when and how to use this function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-jsonUtils.html#fromJSON)
     *
     * @param json A JSON representation of the instance in the ArcGIS format. See                     the [ArcGIS REST API documentation](https://developers.arcgis.com/documentation/common-data-types/overview-of-common-data-types.htm)                     for examples of the structure of various input JSON objects.
     *
     */
    fromJSON(json: any): Geometry;
    /**
     * Returns the type for a given geometry in the JSON format used by the ArcGIS platform.This only applies to geometries that can be processed by the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-jsonUtils.html#getJsonType)
     *
     * @param geometry The input geometry object.
     *
     */
    getJsonType(geometry: Geometry): string;
  }

  export const jsonUtils: jsonUtils;

  interface MeshComponent extends Accessor {
    /**
     * A flat array of indices that refer to vertices in the[vertexAttributes](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes) of themesh to which the component belongs. Each triple of indices defines a triangleto render (i.e. the faces array must always have a length that is a multiple of 3).Note that the indices refer to **vertices** and not to the index of the first coordinateof a vertex in the [vertexAttributes.position](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes)array.If faces is `null`, then all the vertices in the mesh will be renderedas triangles for this component.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshComponent.html#faces)
     */
    faces: Uint32Array;
    /**
     * The material determines how the component is visualized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshComponent.html#material)
     */
    material: MeshMaterial;
    /**
     * Specifies the type of normals used for lighting. This determines whether the objecthas a smooth or an angular appearance. The following shading types are supported:| Type | Description ||------|-------------|| source | Shading uses the normals as defined in the vertex attributes. If no normals are defined, then shading defaults back to `flat` || flat | Shading uses normals created per triangle face. This type of shading is good for objects with sharp edges such as boxes. || smooth | Shading uses per-vertex normals that average the normals of all the faces a vertex is a part of. This type of shading is good for meshes that approximate curved surfaces such as spheres. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshComponent.html#shading)
     */
    shading: string;

    /**
     * Creates a deep clone.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshComponent.html#clone)
     *
     *
     */
    clone(): MeshComponent;
  }

  interface MeshComponentConstructor {
    new (properties?: MeshComponentProperties): MeshComponent;
  }

  export const MeshComponent: MeshComponentConstructor;

  interface MeshComponentProperties {
    /**
     * A flat array of indices that refer to vertices in the[vertexAttributes](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes) of themesh to which the component belongs. Each triple of indices defines a triangleto render (i.e. the faces array must always have a length that is a multiple of 3).Note that the indices refer to **vertices** and not to the index of the first coordinateof a vertex in the [vertexAttributes.position](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes)array.If faces is `null`, then all the vertices in the mesh will be renderedas triangles for this component.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshComponent.html#faces)
     */
    faces?: Uint32Array | number[] | Uint16Array;
    /**
     * The material determines how the component is visualized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshComponent.html#material)
     */
    material?: MeshMaterialProperties;
    /**
     * Specifies the type of normals used for lighting. This determines whether the objecthas a smooth or an angular appearance. The following shading types are supported:| Type | Description ||------|-------------|| source | Shading uses the normals as defined in the vertex attributes. If no normals are defined, then shading defaults back to `flat` || flat | Shading uses normals created per triangle face. This type of shading is good for objects with sharp edges such as boxes. || smooth | Shading uses per-vertex normals that average the normals of all the faces a vertex is a part of. This type of shading is good for meshes that approximate curved surfaces such as spheres. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshComponent.html#shading)
     */
    shading?: string;
  }

  interface MeshMaterial extends Accessor {
    /**
     * Specifies how transparency on the object is handled.If `alphaMode` is set to either `mask` or `auto` this property specifies the cutoff value below whichmasking happens (that is, the coresponding part of the Mesh is rendered fully transparent).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#alphaCutoff)
     *
     * @default 0.5
     */
    alphaCutoff: number;
    /**
     * Specifies how transparency on the object is handled. See also `alphaCutoff`.| Type | Description ||------|-------------|| opaque | Alpha is ignored, and the object is rendered fully opaque. || blend | Alpha values are used for gradual transparency, blending between the object and its background. || mask | Alpha values are used for binary transparency, either displaying the object, or its background. See also `alphaCutoff`. || auto | The implementation mixes the `mask` and `blend` settings, masking below `alphaCutoff` and blending above it. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#alphaMode)
     *
     * @default "auto"
     */
    alphaMode: string;
    /**
     * Allows to specify a single, uniform color for the mesh component. This can be autocast witha named string, hex string, array of rgb or rgba values, an object with `r`, `g`, `b`, and `a`properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#color)
     */
    color: Color;
    /**
     * Allows to specify a texture to get color information from.The texture is accessed using the uv coordinate specified for each vertexin the mesh vertex attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#colorTexture)
     */
    colorTexture: MeshTexture;
    /**
     * Specifies whether both sides of each triangle are displayed, or only the front sides.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#doubleSided)
     *
     * @default true
     */
    doubleSided: boolean;
    /**
     * Allows to specify a texture to get normal information from.The texture is accessed using the uv coordinate specified for each vertexin the mesh vertex attributes. Normal mapping requires also for tangents to bespecified in the mesh vertex attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#normalTexture)
     */
    normalTexture: MeshTexture;
  }

  interface MeshMaterialConstructor {
    new (properties?: MeshMaterialProperties): MeshMaterial;
  }

  export const MeshMaterial: MeshMaterialConstructor;

  interface MeshMaterialProperties {
    /**
     * Specifies how transparency on the object is handled.If `alphaMode` is set to either `mask` or `auto` this property specifies the cutoff value below whichmasking happens (that is, the coresponding part of the Mesh is rendered fully transparent).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#alphaCutoff)
     *
     * @default 0.5
     */
    alphaCutoff?: number;
    /**
     * Specifies how transparency on the object is handled. See also `alphaCutoff`.| Type | Description ||------|-------------|| opaque | Alpha is ignored, and the object is rendered fully opaque. || blend | Alpha values are used for gradual transparency, blending between the object and its background. || mask | Alpha values are used for binary transparency, either displaying the object, or its background. See also `alphaCutoff`. || auto | The implementation mixes the `mask` and `blend` settings, masking below `alphaCutoff` and blending above it. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#alphaMode)
     *
     * @default "auto"
     */
    alphaMode?: string;
    /**
     * Allows to specify a single, uniform color for the mesh component. This can be autocast witha named string, hex string, array of rgb or rgba values, an object with `r`, `g`, `b`, and `a`properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#color)
     */
    color?: Color | number[] | string;
    /**
     * Allows to specify a texture to get color information from.The texture is accessed using the uv coordinate specified for each vertexin the mesh vertex attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#colorTexture)
     */
    colorTexture?: MeshTextureProperties | HTMLImageElement | HTMLCanvasElement | ImageData | string;
    /**
     * Specifies whether both sides of each triangle are displayed, or only the front sides.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#doubleSided)
     *
     * @default true
     */
    doubleSided?: boolean;
    /**
     * Allows to specify a texture to get normal information from.The texture is accessed using the uv coordinate specified for each vertexin the mesh vertex attributes. Normal mapping requires also for tangents to bespecified in the mesh vertex attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#normalTexture)
     */
    normalTexture?: MeshTextureProperties | HTMLImageElement | HTMLCanvasElement | ImageData | string;
  }

  interface MeshTexture extends Accessor {
    /**
     * A direct reference to the image data. The image data can be an[image element](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement),[canvas element](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement)or [ImageData](https://developer.mozilla.org/en-US/docs/Web/API/ImageData).The data property is mutually exclusive with the url property, setting the data will clear theurl (if there is one).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html#data)
     */
    data: HTMLImageElement | HTMLCanvasElement | ImageData;
    /**
     * Indicates whether the image data should be interpreted as being semi-transparent.The default value is automatically derived when the data property contains a canvaselement or an ImageData object. If instead a url to a .png file was provided, it isassumed that transparency is present. In all other cases it defaults to `false`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html#transparent)
     *
     * @default undefined
     */
    transparent: boolean;
    /**
     * The url to the image resource. This can either be a remote url (absolute or relative) or a data url.The url property is mutually exclusive with the data property, setting the url will clear thedata (if there is one).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html#url)
     */
    url: string;
    /**
     * Specifies how uv coordinates outside the [0, 1] range are handled. One of "repeat", "clamp" or "mirror".Can also be specified separately for the two texture axes using an object:```js{  vertical: "clamp",  horizontal: "repeat"}```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html#wrap)
     *
     * @default "repeat"
     */
    wrap: string | any;

    /**
     * Creates a deep clone.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html#clone)
     *
     *
     */
    clone(): MeshTexture;
  }

  interface MeshTextureConstructor {
    new (properties?: MeshTextureProperties): MeshTexture;
  }

  export const MeshTexture: MeshTextureConstructor;

  interface MeshTextureProperties {
    /**
     * A direct reference to the image data. The image data can be an[image element](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement),[canvas element](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement)or [ImageData](https://developer.mozilla.org/en-US/docs/Web/API/ImageData).The data property is mutually exclusive with the url property, setting the data will clear theurl (if there is one).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html#data)
     */
    data?: HTMLImageElement | HTMLCanvasElement | ImageData;
    /**
     * Indicates whether the image data should be interpreted as being semi-transparent.The default value is automatically derived when the data property contains a canvaselement or an ImageData object. If instead a url to a .png file was provided, it isassumed that transparency is present. In all other cases it defaults to `false`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html#transparent)
     *
     * @default undefined
     */
    transparent?: boolean;
    /**
     * The url to the image resource. This can either be a remote url (absolute or relative) or a data url.The url property is mutually exclusive with the data property, setting the url will clear thedata (if there is one).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html#url)
     */
    url?: string;
    /**
     * Specifies how uv coordinates outside the [0, 1] range are handled. One of "repeat", "clamp" or "mirror".Can also be specified separately for the two texture axes using an object:```js{  vertical: "clamp",  horizontal: "repeat"}```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html#wrap)
     *
     * @default "repeat"
     */
    wrap?: string | any;
  }

  interface meshUtils {
    /**
     * Creates an elevation sampler from a mesh. The sampler can be used to query elevation valueson the surface of the mesh. The elevation sampler uses a snapshot of the Mesh geometry andwill not update if the mesh changes after the sampler has been created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#createElevationSampler)
     *
     * @param mesh The mesh geometry used to create the elevation sampler.
     * @param options Additional options.
     * @param options.noDataValue The value to use when there is no data available.
     *
     */
    createElevationSampler(mesh: Mesh, options?: meshUtilsCreateElevationSamplerOptions): IPromise<ElevationSampler>;
    /**
     * Creates a mesh geometry by sampling elevation data from an elevation service on a regular grid.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#createFromElevation)
     *
     * @param source The source from which to query the elevation data.
     * @param extent The extent from which to create the mesh.
     * @param options Additional options.
     * @param options.demResolution Controls the horizontal resolution (cell size)  in meters from which elevation data is sampled (defaults to `auto`). See [ElevationLayer.queryElevation](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#queryElevation)  for more details on the different settings.
     *
     */
    createFromElevation(
      source: ElevationLayer | Ground | ElevationSampler,
      extent: Extent,
      options?: meshUtilsCreateFromElevationOptions
    ): IPromise<Mesh>;
    /**
     * Georeferences vertices specified in a Cartesian coordinate system. This is usefulwhen converting general 3D model meshes not typically georeferenced. This methodoperates on mesh vertex attributes and will convert positions and normals (if specified)from a local (0, 0, 0) Cartesian system to the properly georeferenced coordinates at thespecified `location`. The unit of the source data defaults to the unit of the `location`'s spatial reference.If the coordinate system is WGS84, metric units are used as the default. The unit of the source data may bespecified in the additional `options` in which case a linear unit scale will automatically be applied to bringthe source data in the unit of the spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#georeference)
     *
     * @param vertexAttributes The position and normal buffers to georeference.
     * @param location The location at which to georeference the position and normal buffers.
     * @param options Additional options.
     * @param options.geographic Indicates whether to georeference relative to the globe or the projected coordinate system.
     * @param options.unit Indicates the unit of the source data. A linear scale will be applied to the position attributes  to convert the source data to the unit of the spatial reference at which the mesh is being georeferenced. By default the unit  of the source data is assumed to be the same as the target spatial reference.**Possible Values:** millimeters | centimeters | decimeters | meters | kilometers | inches | feet | yards | miles | nautical-miles | us-feet
     *
     */
    georeference(
      vertexAttributes: VertexAttributes,
      location: Point,
      options?: meshUtilsGeoreferenceOptions
    ): VertexAttributes;
    /**
     * Merges multiple meshes into a single mesh. All mesh geometriesmust be in the same spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#merge)
     *
     * @param geometries One or more meshes.
     *
     */
    merge(geometries: Mesh[]): Mesh;
    /**
     * Projects georeferenced vertices to a Cartesian coordinate system.This is useful for converting existing scene geometry so that it can be usedas source material for generating new 3D meshes. This methodoperates on mesh vertex attributes and will convert positions and normals (if specified)from georeferenced coordinates at the specified `location` to a local (0, 0, 0) Cartesian system.The unit of the resulting data defaults to the unit of the `location`'s spatial reference.If the coordinate system is WGS84, metric units are used as the default. The unit of the resulting data may bespecified in the additional `options` in which case a linear unit scale will automatically be applied.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#ungeoreference)
     *
     * @param vertexAttributes The georeferenced position and normal buffers.
     * @param location The location to which the position and normal buffers are georeferenced.
     * @param options Additional options.
     * @param options.geographic Indicates whether the coordinates are georeferenced relative to the globe or the projected coordinate system.
     * @param options.unit Indicates the unit of the resulting data. A linear scale will be applied to the position attributes  to convert the source data to the specified unit. By default the unit of the resulting data will be the same as the source spatial reference.**Possible Values:** millimeters | centimeters | decimeters | meters | kilometers | inches | feet | yards | miles | nautical-miles | us-feet
     *
     */
    ungeoreference(
      vertexAttributes: VertexAttributes,
      location: Point,
      options?: meshUtilsUngeoreferenceOptions
    ): VertexAttributes;
  }

  export const meshUtils: meshUtils;

  export interface meshUtilsCreateElevationSamplerOptions extends Object {
    /**
     * The value to use when there is no data available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#createElevationSampler)
     *
     * @default 0
     */
    noDataValue?: number;
  }

  export interface meshUtilsCreateFromElevationOptions extends Object {
    /**
     * Controls the horizontal resolution (cell size)  in meters from which elevation data is sampled (defaults to `auto`). See [ElevationLayer.queryElevation](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#queryElevation)  for more details on the different settings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#createFromElevation)
     *
     * @default auto
     */
    demResolution?: number | string;
  }

  export interface meshUtilsGeoreferenceOptions extends Object {
    /**
     * Indicates whether to georeference relative to the globe or the projected coordinate system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#georeference)
     */
    geographic?: boolean;
    /**
     * Indicates the unit of the source data. A linear scale will be applied to the position attributes  to convert the source data to the unit of the spatial reference at which the mesh is being georeferenced. By default the unit  of the source data is assumed to be the same as the target spatial reference.**Possible Values:** millimeters | centimeters | decimeters | meters | kilometers | inches | feet | yards | miles | nautical-miles | us-feet
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#georeference)
     */
    unit?: string;
  }

  export interface meshUtilsUngeoreferenceOptions extends Object {
    /**
     * Indicates whether the coordinates are georeferenced relative to the globe or the projected coordinate system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#ungeoreference)
     */
    geographic?: boolean;
    /**
     * Indicates the unit of the resulting data. A linear scale will be applied to the position attributes  to convert the source data to the specified unit. By default the unit of the resulting data will be the same as the source spatial reference.**Possible Values:** millimeters | centimeters | decimeters | meters | kilometers | inches | feet | yards | miles | nautical-miles | us-feet
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#ungeoreference)
     */
    unit?: string;
  }

  /**
   * Represents the position and normal vertex attribute buffers of a mesh.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#VertexAttributes)
   */
  export interface VertexAttributes extends Object {
    /**
     * The position buffer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#VertexAttributes)
     */
    position: Float64Array;
    /**
     * The normal buffer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#VertexAttributes)
     */
    normal?: Float32Array;
  }

  interface normalizeUtils {
    /**
     * Normalizes geometries that intersect the central meridian or fall outside theworld extent so they stay within the coordinate system of the view. Only supportedfor Web Mercator and WGS84 spatial references.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-normalizeUtils.html#normalizeCentralMeridian)
     *
     * @param geometries An array of geometries to normalize.
     * @param geometryService A geometry service used toperform the normalization. If this value is `null` then the default geometry service in[esriConfig.geometryServiceUrl](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#geometryServiceUrl) is used.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request.
     *
     */
    normalizeCentralMeridian(
      geometries: Geometry[],
      geometryService?: GeometryService,
      requestOptions?: any
    ): IPromise<Geometry[]>;
  }

  export const normalizeUtils: normalizeUtils;

  interface ValueMeshColor extends Accessor {
    /**
     * For ValueMeshColor the type is always `value`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-ValueMeshColor.html#type)
     */
    readonly type: "value";
    /**
     * The color value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-ValueMeshColor.html#value)
     */
    value: Color;

    /**
     * Creates a deep clone.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-ValueMeshColor.html#clone)
     *
     *
     */
    clone(): ValueMeshColor;
  }

  interface ValueMeshColorConstructor {
    new (properties?: ValueMeshColorProperties): ValueMeshColor;
  }

  export const ValueMeshColor: ValueMeshColorConstructor;

  interface ValueMeshColorProperties {
    /**
     * The color value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-ValueMeshColor.html#value)
     */
    value?: Color | number[] | string;
  }

  interface webMercatorUtils {
    /**
     * Returns `true` if the `source` spatial reference can be projected to the `target` spatial reference with the [project()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-webMercatorUtils.html#project) function, orif the `source` and `target` are the same [SpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-webMercatorUtils.html#canProject)
     *
     * @param source The input [SpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html) or an object with                                                                 `spatialReference` property such as [Geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html)                                                                 or [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html).
     * @param target The target [SpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html) or an object with                                                                 `spatialReference` property such as [Geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html)                                                                 or [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html).
     *
     */
    canProject(source: SpatialReference | any, target: SpatialReference | any): boolean;
    /**
     * Converts a geometry from geographic units (wkid: 4326) to Web Mercator units (wkid: 3857).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-webMercatorUtils.html#geographicToWebMercator)
     *
     * @param geometry The input geometry to convert.
     *
     */
    geographicToWebMercator(geometry: Geometry): Geometry;
    /**
     * Translates the given latitude and longitude (decimal degree) values to Web Mercator XY values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-webMercatorUtils.html#lngLatToXY)
     *
     * @param long The longitude value to convert.
     * @param lat The latitude value to convert.
     *
     */
    lngLatToXY(long: number, lat: number): number[];
    /**
     * Projects the geometry clientside (if possible). You should test the input geometry in [canProject()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-webMercatorUtils.html#canProject) prior to using this function.If the result of [canProject()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-webMercatorUtils.html#canProject) is `true`, then proceed to project. If [canProject()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-webMercatorUtils.html#canProject) returns `false`, then`project()` won't return useful results. Use [GeometryService.project()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#project) instead.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-webMercatorUtils.html#project)
     *
     * @param geometry The input geometry.
     * @param spatialReference The target [SpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html) or an object with                                                                 `spatialReference` property such as [Geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html)                                                                 or [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html).
     *
     */
    project(geometry: Geometry, spatialReference: SpatialReference | any): Geometry;
    /**
     * Converts a geometry from Web Mercator units (wkid: 3857) to geographic units (wkid: 4326).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-webMercatorUtils.html#webMercatorToGeographic)
     *
     * @param geometry The input geometry to convert.
     *
     */
    webMercatorToGeographic(geometry: Geometry): Geometry;
    /**
     * Translates the given Web Mercator coordinates to Longitude and Latitude values (decimal degrees).By default the returned longitude is normalized so that it is within -180 and +180.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-webMercatorUtils.html#xyToLngLat)
     *
     * @param x The X coordinate value to convert.
     * @param y The Y coordinate value to convert.
     *
     */
    xyToLngLat(x: number, y: number): number[];
  }

  export const webMercatorUtils: webMercatorUtils;

  /**
   * Extent.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry.html#Extent)
   */
  export type geometryExtent = Extent;

  /**
   * Geometry types.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry.html#Geometry)
   */
  export type geometryGeometry = Extent | Multipoint | Point | Polygon | Polyline | Mesh;

  /**
   * Mesh.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry.html#Mesh)
   */
  export type geometryMesh = Mesh;

  /**
   * Multipoint.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry.html#Multipoint)
   */
  export type geometryMultipoint = Multipoint;

  /**
   * Point.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry.html#Point)
   */
  export type geometryPoint = Point;

  /**
   * Polygon.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry.html#Polygon)
   */
  export type geometryPolygon = Polygon;

  /**
   * Polyline.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry.html#Polyline)
   */
  export type geometryPolyline = Polyline;

  /**
   * Spatial Reference.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry.html#SpatialReference)
   */
  export type geometrySpatialReference = SpatialReference;

  interface Graphic extends Accessor, JSONSupport {
    /**
     * Name-value pairs of fields and field values associated with the graphic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#attributes)
     */
    attributes: any;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#geometry)
     */
    geometry: Geometry;
    /**
     * If applicable, references the layer in which the graphic is stored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#layer)
     */
    layer: Layer;
    /**
     * The template for displaying content in a [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html)when the graphic is selected. The [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) may be used to accessa graphic's [attributes](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#attributes) and display their values in the view'sdefault popup. See the documentation for [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) for details onhow to display attribute values in the popup.As of 4.8 to get the actual `popupTemplate` of the graphic, see the [getEffectivePopupTemplate()](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#getEffectivePopupTemplate)method that either returns this value or the `popupTemplate` of the graphic's layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * The [Symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol.html) for the graphic. Choosing a symbol for a graphic depends on the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) type (SceneView or MapView),and the [geometry type](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html#type) of the graphic.Each graphic may have its own symbol specified when the parent layer is a [GraphicsLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html).For a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) the symbol of each graphic should not be set by the developer since thegraphics' rendering properties are determined by the layer's [renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#symbol)
     */
    symbol: Symbol;
    /**
     * Indicates the visibility of the graphic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#visible)
     *
     * @default true
     */
    visible: boolean;

    /**
     * Creates a deep clone of the graphic object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#clone)
     *
     *
     */
    clone(): Graphic;
    /**
     * Returns the value of the specified attribute.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#getAttribute)
     *
     * @param name The name of the attribute.
     *
     */
    getAttribute(name: string): any;
    /**
     * Returns the popup template applicable for the graphic.It's either the value of [popupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#popupTemplate) orthe `popupTemplate` from the graphic's layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#getEffectivePopupTemplate)
     *
     * @param defaultPopupTemplateEnabled Whether support for default popup templates  is enabled. When true, a default popup template may be created automatically if neither  the graphic nor its layer have a popup template defined.
     *
     */
    getEffectivePopupTemplate(defaultPopupTemplateEnabled?: boolean): PopupTemplate;
    /**
     * Sets a new value to the specified attribute.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#setAttribute)
     *
     * @param name The name of the attribute to set.
     * @param newValue The new value to set on the named attribute.
     *
     */
    setAttribute(name: string, newValue: any): void;
  }

  interface GraphicConstructor {
    new (properties?: GraphicProperties): Graphic;

    fromJSON(json: any): Graphic;
  }

  export const Graphic: GraphicConstructor;

  interface GraphicProperties {
    /**
     * Name-value pairs of fields and field values associated with the graphic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#attributes)
     */
    attributes?: any;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#geometry)
     */
    geometry?: GeometryProperties;
    /**
     * If applicable, references the layer in which the graphic is stored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#layer)
     */
    layer?: LayerProperties;
    /**
     * The template for displaying content in a [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html)when the graphic is selected. The [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) may be used to accessa graphic's [attributes](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#attributes) and display their values in the view'sdefault popup. See the documentation for [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) for details onhow to display attribute values in the popup.As of 4.8 to get the actual `popupTemplate` of the graphic, see the [getEffectivePopupTemplate()](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#getEffectivePopupTemplate)method that either returns this value or the `popupTemplate` of the graphic's layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * The [Symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol.html) for the graphic. Choosing a symbol for a graphic depends on the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) type (SceneView or MapView),and the [geometry type](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html#type) of the graphic.Each graphic may have its own symbol specified when the parent layer is a [GraphicsLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html).For a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) the symbol of each graphic should not be set by the developer since thegraphics' rendering properties are determined by the layer's [renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#symbol)
     */
    symbol?: SymbolProperties;
    /**
     * Indicates the visibility of the graphic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#visible)
     *
     * @default true
     */
    visible?: boolean;
  }

  interface Ground extends Accessor, Loadable, JSONSupport {
    /**
     * A collection of[ElevationLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html)that define the elevation or terrain that makes up the ground surface. When elevation layers are added to theground, the topographical variations of the surface are rendered in 3D as they would appear in the real world.![elev-default](https://developers.arcgis.com/javascript/assets/img/apiref/ground/elev-default.png)When the layers collection is empty, the ground surface is flat.![no-elev](https://developers.arcgis.com/javascript/assets/img/apiref/ground/no-elev.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#layers)
     */
    layers: Collection<ElevationLayer>;
    /**
     * Indicates whether the instance has loaded. When `true`,the properties of the object can be accessed. A Ground is considered loadedwhen its [layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#layers) are fully created, but not yet loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#loaded)
     *
     * @default false
     */
    readonly loaded: boolean;
    /**
     * Specifies the user navigation constraints relative tothe ground surface.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#navigationConstraint)
     */
    navigationConstraint: GroundNavigationConstraint;
    /**
     * Opacity of the ground, including surface default color and the basemap (without reference layers).This property can be used for a see-through ground effect.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#opacity)
     *
     * @default 1
     */
    opacity: number;
    /**
     * The color of the ground surface, displayed underneath the basemap.If this is null, a grid is displayed instead. The alpha value in thecolor is ignored. Use the [opacity](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#opacity) property to control theopacity of the ground.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#surfaceColor)
     *
     * @default null
     */
    surfaceColor: Color;

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#clone)
     *
     *
     */
    clone(): Ground;
    /**
     * Creates an elevation sampler for the given extent by querying the ground layersfor elevation data and caching it so values may be sampled quickly afterwards.The sampler uses the elevation data from the first layer that has data available.For getting elevation data from a specific layer use[ElevationLayer.createElevationSampler()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#createElevationSampler).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#createElevationSampler)
     *
     * @param extent The extent for which to create the sampler.
     * @param options Additional sampler options.
     * @param options.noDataValue The value to use when there is no data available.
     *
     */
    createElevationSampler(extent: Extent, options?: GroundCreateElevationSamplerOptions): IPromise<ElevationSampler>;
    /**
     * Loads all the externally loadable resources associated with the ground.For the ground this will load all the layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#loadAll)
     *
     *
     */
    loadAll(): IPromise<Ground>;
    /**
     * Queries the ground layer services for elevation values for the given geometry. Thereturned result contains a copy of the geometry with z-values sampled fromelevation data from the first layer that has data available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#queryElevation)
     *
     * @param geometry The geometry to sample.
     * @param options Additional query options.
     * @param options.returnSampleInfo Indicates whether to return additional sample informationfor each sampled coordinate.
     * @param options.noDataValue The value that appears in the resulting geometry when thereis no data available.
     *
     */
    queryElevation(
      geometry: Point | Multipoint | Polyline,
      options?: GroundQueryElevationOptions
    ): IPromise<ElevationQueryResult>;
  }

  interface GroundConstructor {
    new (properties?: GroundProperties): Ground;

    fromJSON(json: any): Ground;
  }

  export const Ground: GroundConstructor;

  interface GroundProperties extends LoadableProperties {
    /**
     * A collection of[ElevationLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html)that define the elevation or terrain that makes up the ground surface. When elevation layers are added to theground, the topographical variations of the surface are rendered in 3D as they would appear in the real world.![elev-default](https://developers.arcgis.com/javascript/assets/img/apiref/ground/elev-default.png)When the layers collection is empty, the ground surface is flat.![no-elev](https://developers.arcgis.com/javascript/assets/img/apiref/ground/no-elev.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#layers)
     */
    layers?: CollectionProperties<ElevationLayerProperties>;
    /**
     * Specifies the user navigation constraints relative tothe ground surface.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#navigationConstraint)
     */
    navigationConstraint?: GroundNavigationConstraintProperties;
    /**
     * Opacity of the ground, including surface default color and the basemap (without reference layers).This property can be used for a see-through ground effect.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#opacity)
     *
     * @default 1
     */
    opacity?: number;
    /**
     * The color of the ground surface, displayed underneath the basemap.If this is null, a grid is displayed instead. The alpha value in thecolor is ignored. Use the [opacity](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#opacity) property to control theopacity of the ground.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#surfaceColor)
     *
     * @default null
     */
    surfaceColor?: Color | number[] | string;
  }

  /**
   * Object returned when [queryElevation()](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#queryElevation) promise resolves:
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#ElevationQueryResult)
   */
  export interface ElevationQueryResult extends Object {
    /**
     * The geometry with sampled z-values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#ElevationQueryResult)
     */
    geometry: Point | Multipoint | Polyline;
    /**
     * Contains additional information about how the geometry was sampled.                                  This property is present depending on whether the user set `options.returnSampleInfo = true`,                                  for each coordinate in the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#ElevationQueryResult)
     */
    sampleInfo?: ElevationQueryResultSampleInfo[];
    /**
     * The value used when there is no data available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#ElevationQueryResult)
     */
    noDataValue: number;
  }

  export interface GroundCreateElevationSamplerOptions extends Object {
    /**
     * The value to use when there is no data available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#createElevationSampler)
     *
     * @default 0
     */
    noDataValue?: number;
  }

  export interface GroundNavigationConstraintProperties extends Object {
    /**
     * The type of the constraint. It can be one of the following:Value      | Description-----------|--------------------stay-above | User can only navigate above ground surfacenone       | User can navigate above and below the ground surfaceDefault value: stay-above
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#navigationConstraint)
     */
    type?: string;
  }

  export interface GroundNavigationConstraint extends AnonymousAccessor {
    /**
     * The type of the constraint. It can be one of the following:Value      | Description-----------|--------------------stay-above | User can only navigate above ground surfacenone       | User can navigate above and below the ground surfaceDefault value: stay-above
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#navigationConstraint)
     */
    type: string;
  }

  export interface GroundQueryElevationOptions extends Object {
    /**
     * Indicates whether to return additional sample informationfor each sampled coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#queryElevation)
     *
     * @default false
     */
    returnSampleInfo?: boolean;
    /**
     * The value that appears in the resulting geometry when thereis no data available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#queryElevation)
     *
     * @default 0
     */
    noDataValue?: number;
  }

  export interface ElevationQueryResultSampleInfo extends Object {
    /**
     * The resolution at which the z-value was sampled.                                  If no data was available for sampling for a given coordinate,                                  the dem resolution value will be -1 for that coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#ElevationQueryResult)
     */
    demResolution: number;
    /**
     * The elevation source from which                                  the data for the corresponding coordinate was sampled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#ElevationQueryResult)
     */
    source: ElevationLayer;
  }

  interface Credential extends Accessor {
    /**
     * Token expiration time specified as number of milliseconds since 1 January 1970 00:00:00 UTC.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html#expires)
     */
    expires: number;
    /**
     * Indicates that this credential was created to access the [ArcGIS REST Admin service](https://developers.arcgis.com/rest/services-reference/rest-api-admin.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html#isAdmin)
     */
    isAdmin: boolean;
    /**
     * The Identity Manager's[setOAuthRedirectionHandler](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#setOAuthRedirectionHandler)returns an object that contains a `state` property. This information is returned for this property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html#oAuthState)
     */
    oAuthState: any;
    /**
     * The server url.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html#server)
     */
    server: string;
    /**
     * Indicates whether the resources accessed using this credential should be fetched over HTTPS protocol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html#ssl)
     */
    ssl: boolean;
    /**
     * Token generated by the token service using the specified userId and password.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html#token)
     */
    token: string;
    /**
     * User associated with the Credential object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html#userId)
     */
    userId: string;

    /**
     * Destroys the credential. When the credential is destroyed, you shouldremove any map layers that are using this credential. Any tokensgenerated via OAuth will automatically be revoked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html#destroy)
     *
     *
     */
    destroy(): void;
    /**
     * Generates a new token and updates the Credential's [token](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html#token) property withthe newly acquired token. Tokens are typically kept valid using a timer that automaticallytriggers a refresh before the token expires. Use this method in cases where thetimer has been delayed or stopped.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html#refreshToken)
     *
     *
     */
    refreshToken(): void;

    on(name: "token-change", eventHandler: CredentialTokenChangeEventHandler): IHandle;

    on(name: "destroy", eventHandler: CredentialDestroyEventHandler): IHandle;
  }

  interface CredentialConstructor {
    new (properties?: CredentialProperties): Credential;
  }

  export const Credential: CredentialConstructor;

  interface CredentialProperties {
    /**
     * Token expiration time specified as number of milliseconds since 1 January 1970 00:00:00 UTC.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html#expires)
     */
    expires?: number;
    /**
     * Indicates that this credential was created to access the [ArcGIS REST Admin service](https://developers.arcgis.com/rest/services-reference/rest-api-admin.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html#isAdmin)
     */
    isAdmin?: boolean;
    /**
     * The Identity Manager's[setOAuthRedirectionHandler](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#setOAuthRedirectionHandler)returns an object that contains a `state` property. This information is returned for this property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html#oAuthState)
     */
    oAuthState?: any;
    /**
     * The server url.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html#server)
     */
    server?: string;
    /**
     * Indicates whether the resources accessed using this credential should be fetched over HTTPS protocol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html#ssl)
     */
    ssl?: boolean;
    /**
     * Token generated by the token service using the specified userId and password.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html#token)
     */
    token?: string;
    /**
     * User associated with the Credential object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html#userId)
     */
    userId?: string;
  }

  export interface CredentialDestroyEvent {}

  export interface CredentialTokenChangeEvent {}

  interface IdentityManager extends Evented {
    /**
     * Dialog box widget used to challenge the user for their credentials when the application attempts to access a secure resource. This property is available after the dialog-create event has fired.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#dialog)
     */
    dialog: any;
    /**
     * The suggested lifetime of the token in minutes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#tokenValidity)
     *
     * @default 60
     */
    tokenValidity: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#useSignInPage)
     *
     * @default true
     */
    useSignInPage: boolean;

    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#checkAppAccess)
     *
     * @param resUrl The resource URL.
     * @param appId The registered OAuth application id.
     *
     */
    checkAppAccess(resUrl: string, appId: string): IPromise<any>;
    /**
     * Returns the [Credential](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html) if the user has already signed in to access the given resource. If the user has not signed in, then the promise will be rejected and its error callback will be called.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#checkSignInStatus)
     *
     * @param resUrl The resource URL.
     *
     */
    checkSignInStatus(resUrl: string): IPromise<Credential>;
    /**
     * Destroys all credentials. It is good practice to call this method if workingwith an application that contains sign-out functionality as any tokensgenerated via OAuth will automatically be revoked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#destroyCredentials)
     *
     *
     */
    destroyCredentials(): void;
    /**
     * Returns the [Credential](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html) for the resource identified by the specified url. Optionally, you can provide a userId to find credentials for a specific user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#findCredential)
     *
     * @param url The URL to a server.
     * @param userId The userId for which you want to obtain credentials.
     *
     */
    findCredential(url: string, userId?: string): Credential;
    /**
     * Returns the [OAuthInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html) configuration for the passed in Portal server URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#findOAuthInfo)
     *
     * @param url The URL to a Portal.
     *
     */
    findOAuthInfo(url: string): OAuthInfo;
    /**
     * Returns information about the server that is hosting the specified URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#findServerinfo)
     *
     * @param url The URL to the server
     *
     */
    findServerinfo(url: string): ServerInfo;
    /**
     * Returns an object containing a token and its expiration time. It is necessary to provide the [ServerInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html) object that contains a token service URL and a user info object containing username and password. This is a helper method typically called by sub-classes to generate tokens.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#generateToken)
     *
     * @param serverInfo A ServerInfo object that contains a token service URL.
     * @param userInfo A user info object containing a user name and password.
     * @param options See the table below for the structure of this object.
     * @param options.serverUrl The server URL.
     * @param options.token The server token.
     * @param options.ssl Indicates if the server requires SSL.
     *
     */
    generateToken(serverInfo: ServerInfo, userInfo: any, options?: IdentityManagerGenerateTokenOptions): IPromise<any>;
    /**
     * Returns a [Credential](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html) object that can be used to access the secured resource identified by the input URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#getCredential)
     *
     * @param url The URL for the secure resource
     * @param options See the table below for the structure of the **options** object.
     * @param options.error Error object returned by the server from a previous attempt to fetch the given URL.
     * @param options.oAuthPopupConfirmation If set to *false*, the user will not be shown a dialog before the OAuth popup window is opened.
     * @param options.token Token used for a previous unsuccessful attempt to fetch the given URL.
     *
     */
    getCredential(url: string, options?: IdentityManagerGetCredentialOptions): IPromise<Credential>;
    /**
     * Call this method during application initialization with the JSON previously obtained from the [toJSON()](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#toJSON) method used to re-hydrate the state of IdentityManager.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#initialize)
     *
     * @param json The JSON obtained from the [toJSON()](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#toJSON) method.
     *
     */
    initialize(json: any): void;
    /**
     * Indicates if the IdentityManager is busy accepting user input. For example, it returns `true` if the user has invoked [signIn](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#signIn) and is waiting for a response.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#isBusy)
     *
     *
     */
    isBusy(): boolean;
    /**
     * Registers OAuth 2.0 configurations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#registerOAuthInfos)
     *
     * @param oAuthInfos An array of OAuthInfo objects that defines the OAuth configurations.
     *
     */
    registerOAuthInfos(oAuthInfos: OAuthInfo[]): void;
    /**
     * Register secure servers and the token endpoints.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#registerServers)
     *
     * @param serverInfos An array of ServerInfos objects that defines the secure service and token endpoint. The IdentityManager makes its best guess to determine the location of the secure server and token endpoint. Therefore, in most cases calling this method is not necessary. However, if the location of your server or token endpoint is not standard, use this method to register the location.
     *
     */
    registerServers(serverInfos: ServerInfo[]): void;
    /**
     * Registers the given OAuth 2.0 access token or ArcGIS Server token with the IdentityManager.See [registerOAuthInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#registerOAuthInfos) for additional information.The `registerToken` method is an advanced workflow for pre-registering long-term tokens for when you don't want users to sign in.See also [resource-proxy](https://github.com/Esri/resource-proxy) for another workflow to achieve this result.Once a user logs in, the access token is registered with the IdentityManager. Subsequently, every AJAX request madeby the application forwards this token when accessing web maps and other items stored in ArcGIS Online,or resources on your server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#registerToken)
     *
     * @param properties See the table below for the structure of the **properties** object.
     * @param properties.expires Token expiration time specified as number of milliseconds since 1 January 1970 00:00:00 UTC.
     * @param properties.server For ArcGIS Online or Portal, this is https://www.arcgis.com/sharing/rest or similar to https://www.example.com/portal/sharing/rest.                                    For ArcGIS Server this is similar to https://www.example.com/arcgis/rest/services.
     * @param properties.ssl Set this to `true` if the user has an ArcGIS Online organizational account and the organization is configured to allow access to resources only through SSL.
     * @param properties.token The access token.
     * @param properties.userId The id of the user who owns the access token.
     *
     */
    registerToken(properties: IdentityManagerRegisterTokenProperties): void;
    /**
     * Once a user successfully logs in, they are redirected back to the application. Use this method ifthe application needs to execute custom logic before the page is redirected. The IdentityManagercalls the custom handler function with an object containing redirection properties.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#setOAuthRedirectionHandler)
     *
     * @param handlerFunction When called,the callback passed to `setOAuthRedirectionHandler` receives an object containing the redirectionproperties.
     *
     */
    setOAuthRedirectionHandler(handlerFunction: HandlerCallback): void;
    /**
     * Use this method in the popup callback page to pass the token and other values back to the IdentityManager.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#setOAuthResponseHash)
     *
     * @param hash The token information in addition to any other values needed to be passed back to the IdentityManager.
     *
     */
    setOAuthResponseHash(hash: string): void;
    /**
     * When accessing secured resources, the IdentityManager may prompt for username and password and send them to the server using a secure connection. Due to potential browser limitations, it may not be possible to establish a secure connection with the server if the application is being run over HTTP protocol. In such cases, the Identity Manager will abort the request to fetch the secured resource.To resolve this issue, configure your web application server with HTTPS support and run the application over HTTPS. This is the recommended solution for production environments. However, for internal development environments that don't have HTTPS support, you can define a protocol error handler that allows the Identity Manager to continue with the process over HTTP protocol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#setProtocolErrorHandler)
     *
     * @param handlerFunction The function to call when the protocol is mismatched.
     * @param handlerFunction.resourceUrl The secure resource URL.
     * @param handlerFunction.serverInfo ServerInfo object describing the server where the secure resource is hosted.
     *
     */
    setProtocolErrorHandler(handlerFunction: IdentityManagerSetProtocolErrorHandlerHandlerFunction): void;
    /**
     * If your application is on the same domain as *.arcgis.com or ArcGIS Enterprise Server,the IdentityManager will redirect the user to its sign-in page.For instance, let's say an application accesses secure resources from ArcGIS.comor one of its subdomains. Once the application attempts to access this resource,the IdentityManager redirects the user to the ArcGIS.com sign-in page. Once a usersuccessfully logs in, they are redirected back to the application. The sameholds true if the application accesses secure resources from ArcGIS Enterprise asthe IdentityManager will redirect the user to its sign-in page. Use this method ifthe application needs to execute custom logic before the page is redirected by creatinga custom redirection handler. The IdentityManager calls the custom handler function withan object containing the redirection properties.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#setRedirectionHandler)
     *
     * @param handlerFunction The function passed to setRedirectionHandler receives an object containing redirection properties. These properties are listed in the table below.
     * @param handlerFunction.resourceUrl The URL of the secure resource that triggers the redirection to the ArcGIS.com sign-in page.
     * @param handlerFunction.returnUrlParamName The application URL where the sign-in page redirects after a successful login. To create the return URL, append the application's URL to signInPage as a parameter. The *returnUrlParamName* contains the name of the parameter.
     * @param handlerFunction.serverInfo The ServerInfo object describing the server where the secure resource is hosted.
     * @param handlerFunction.signInPage URL of the sign-in page where users will be redirected.
     *
     */
    setRedirectionHandler(handlerFunction: IdentityManagerSetRedirectionHandlerHandlerFunction): void;
    /**
     * Return properties of this object in JSON format. It can be stored in a cookie or persisted in HTML5 LocalStorage and later used to:* Initialize the IdentityManager the next time a user opens your application.* Share the state of the IdentityManager between multiple web pages of your website.This way users will not be asked to sign in repeatedly when they launch your app multiple times or when navigating between multiple web pages in your website.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#toJSON)
     *
     *
     */
    toJSON(): any;
  }

  interface IdentityManagerConstructor {
    new (): IdentityManager;
  }

  export const IdentityManager: IdentityManagerConstructor;

  export type HandlerCallback = (
    authorizeParams: any,
    authorizeUrl: string,
    oAuthInfo: OAuthInfo,
    resourceUrl: string,
    serverInfo: ServerInfo
  ) => void;

  export interface IdentityManagerGenerateTokenOptions extends Object {
    /**
     * The server URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#generateToken)
     */
    serverUrl: string;
    /**
     * The server token.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#generateToken)
     */
    token: string;
    /**
     * Indicates if the server requires SSL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#generateToken)
     */
    ssl: boolean;
  }

  export interface IdentityManagerGetCredentialOptions extends Object {
    /**
     * Error object returned by the server from a previous attempt to fetch the given URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#getCredential)
     */
    error?: Error;
    /**
     * If set to *false*, the user will not be shown a dialog before the OAuth popup window is opened.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#getCredential)
     *
     * @default true
     */
    oAuthPopupConfirmation?: boolean;
    /**
     * Token used for a previous unsuccessful attempt to fetch the given URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#getCredential)
     */
    token?: string;
  }

  export interface IdentityManagerRegisterTokenProperties extends Object {
    /**
     * Token expiration time specified as number of milliseconds since 1 January 1970 00:00:00 UTC.
     *
     * [Read more...](properties.html)
     */
    expires?: number;
    /**
     * For ArcGIS Online or Portal, this is https://www.arcgis.com/sharing/rest or similar to https://www.example.com/portal/sharing/rest.                                    For ArcGIS Server this is similar to https://www.example.com/arcgis/rest/services.
     *
     * [Read more...](properties.html)
     */
    server: string;
    /**
     * Set this to `true` if the user has an ArcGIS Online organizational account and the organization is configured to allow access to resources only through SSL.
     *
     * [Read more...](properties.html)
     */
    ssl?: boolean;
    /**
     * The access token.
     *
     * [Read more...](properties.html)
     */
    token: string;
    /**
     * The id of the user who owns the access token.
     *
     * [Read more...](properties.html)
     */
    userId?: string;
  }

  export interface IdentityManagerSetProtocolErrorHandlerHandlerFunction extends Object {
    /**
     * The secure resource URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#setProtocolErrorHandler)
     */
    resourceUrl: string;
    /**
     * ServerInfo object describing the server where the secure resource is hosted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#setProtocolErrorHandler)
     */
    serverInfo: ServerInfo;
  }

  export interface IdentityManagerSetRedirectionHandlerHandlerFunction extends Object {
    /**
     * The URL of the secure resource that triggers the redirection to the ArcGIS.com sign-in page.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#setRedirectionHandler)
     */
    resourceUrl: string;
    /**
     * The application URL where the sign-in page redirects after a successful login. To create the return URL, append the application's URL to signInPage as a parameter. The *returnUrlParamName* contains the name of the parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#setRedirectionHandler)
     */
    returnUrlParamName: string;
    /**
     * The ServerInfo object describing the server where the secure resource is hosted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#setRedirectionHandler)
     */
    serverInfo: ServerInfo;
    /**
     * URL of the sign-in page where users will be redirected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#setRedirectionHandler)
     */
    signInPage: string;
  }

  interface OAuthInfo extends Accessor, JSONSupport {
    /**
     * The registered application id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#appId)
     */
    appId: string;
    /**
     * Applications with the same value will share the stored token on the same host.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#authNamespace)
     *
     * @default / (forward slash)
     */
    authNamespace: string;
    /**
     * The number of minutes that the token is valid.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#expiration)
     *
     * @default 20160 (two weeks)
     */
    expiration: number;
    /**
     * The locale for the OAuth sign in page. The default localeis based on your browser/OS and the organization locale.You can use the locale property to changethis. The locale needs to follow the language dash country codesyntax supported by ArcGIS.com.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#locale)
     *
     * @default Based on your browser/OS and the organization locale.
     */
    locale: string;
    /**
     * The minimum time in minutes before a saved token is due to expire thatit should still be considered valid for use.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#minTimeUntilExpiration)
     *
     * @default 30
     */
    minTimeUntilExpiration: number;
    /**
     * Set to `true` to show the OAuth sign in page in a popup window.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#popup)
     *
     * @default false
     */
    popup: boolean;
    /**
     * Applicable if working with the popup user-login workflow.This is a relative page URL that redirects the user back tothe secured application after successful login.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#popupCallbackUrl)
     *
     * @default "oauth-callback.html"
     */
    popupCallbackUrl: string;
    /**
     * The window features passed to[window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#popupWindowFeatures)
     *
     * @default height=490,width=800,resizable,scrollbars,status
     */
    popupWindowFeatures: string;
    /**
     * The ArcGIS Enterprise portal URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#portalUrl)
     *
     * @default "https://www.arcgis.com"
     */
    portalUrl: string;

    /**
     * Creates a copy of the OAuthInfo object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#clone)
     *
     *
     */
    clone(): OAuthInfo;
  }

  interface OAuthInfoConstructor {
    new (properties?: OAuthInfoProperties): OAuthInfo;

    fromJSON(json: any): OAuthInfo;
  }

  export const OAuthInfo: OAuthInfoConstructor;

  interface OAuthInfoProperties {
    /**
     * The registered application id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#appId)
     */
    appId?: string;
    /**
     * Applications with the same value will share the stored token on the same host.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#authNamespace)
     *
     * @default / (forward slash)
     */
    authNamespace?: string;
    /**
     * The number of minutes that the token is valid.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#expiration)
     *
     * @default 20160 (two weeks)
     */
    expiration?: number;
    /**
     * The locale for the OAuth sign in page. The default localeis based on your browser/OS and the organization locale.You can use the locale property to changethis. The locale needs to follow the language dash country codesyntax supported by ArcGIS.com.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#locale)
     *
     * @default Based on your browser/OS and the organization locale.
     */
    locale?: string;
    /**
     * The minimum time in minutes before a saved token is due to expire thatit should still be considered valid for use.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#minTimeUntilExpiration)
     *
     * @default 30
     */
    minTimeUntilExpiration?: number;
    /**
     * Set to `true` to show the OAuth sign in page in a popup window.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#popup)
     *
     * @default false
     */
    popup?: boolean;
    /**
     * Applicable if working with the popup user-login workflow.This is a relative page URL that redirects the user back tothe secured application after successful login.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#popupCallbackUrl)
     *
     * @default "oauth-callback.html"
     */
    popupCallbackUrl?: string;
    /**
     * The window features passed to[window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#popupWindowFeatures)
     *
     * @default height=490,width=800,resizable,scrollbars,status
     */
    popupWindowFeatures?: string;
    /**
     * The ArcGIS Enterprise portal URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#portalUrl)
     *
     * @default "https://www.arcgis.com"
     */
    portalUrl?: string;
  }

  interface ServerInfo extends Accessor, JSONSupport {
    /**
     * The token service URL used to generate tokens for ArcGIS Server Admin resources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html#adminTokenServiceUrl)
     */
    adminTokenServiceUrl: string;
    /**
     * Version of the ArcGIS Server deployed on this server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html#currentVersion)
     */
    currentVersion: number;
    /**
     * The server URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html#server)
     */
    server: string;
    /**
     * Validity of short-lived token in minutes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html#shortLivedTokenValidity)
     */
    shortLivedTokenValidity: number;
    /**
     * The token service URL used to generate tokens for the secured resources on the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html#tokenServiceUrl)
     */
    tokenServiceUrl: string;
  }

  interface ServerInfoConstructor {
    new (properties?: ServerInfoProperties): ServerInfo;

    fromJSON(json: any): ServerInfo;
  }

  export const ServerInfo: ServerInfoConstructor;

  interface ServerInfoProperties {
    /**
     * The token service URL used to generate tokens for ArcGIS Server Admin resources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html#adminTokenServiceUrl)
     */
    adminTokenServiceUrl?: string;
    /**
     * Version of the ArcGIS Server deployed on this server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html#currentVersion)
     */
    currentVersion?: number;
    /**
     * The server URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html#server)
     */
    server?: string;
    /**
     * Validity of short-lived token in minutes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html#shortLivedTokenValidity)
     */
    shortLivedTokenValidity?: number;
    /**
     * The token service URL used to generate tokens for the secured resources on the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html#tokenServiceUrl)
     */
    tokenServiceUrl?: string;
  }

  interface intl {
    /**
     * Converts a [web map date format string](https://developers.arcgis.com/web-map-specification/objects/format/) to an [Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat#Parameters) options object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#convertDateFormatToIntlOptions)
     *
     * @param format A web map date format string to convert.**Possible Values**: short-date | short-date-short-time | short-date-short-time-24 | short-date-long-time | short-date-long-time-24 | short-date-le | short-date-le-short-time | short-date-le-short-time-24 | short-date-le-long-time | short-date-le-long-time-24 | long-month-day-year | long-month-day-year-short-time | long-month-day-year-short-time-24 | long-month-day-year-long-time | long-month-day-year-long-time-24 | day-short-month-year | day-short-month-year-short-time | day-short-month-year-short-time-24 | day-short-month-year-long-time | day-short-month-year-long-time-24 | long-date | long-date-short-time | long-date-short-time-24 | long-date-long-time | long-date-long-time-24 | long-month-year | short-month-year | year | short-time | long-time
     *
     */
    convertDateFormatToIntlOptions(format?: string): Intl.DateTimeFormatOptions;
    /**
     * Converts a [NumberFormat](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#NumberFormat) to an [Intl.NumberFormatOptions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat#Parameters) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#convertNumberFormatToIntlOptions)
     *
     * @param format The [NumberFormat](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#NumberFormat) to convert.
     *
     */
    convertNumberFormatToIntlOptions(format?: NumberFormat): Intl.NumberFormatOptions;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#formatDate)
     *
     * @param value The [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) object, or the number of milliseconds elapsed since January 1, 1970 00:00:00 UTC, to be formatted.
     * @param formatOptions Date format options.
     *
     */
    formatDate(value: Date | number, formatOptions?: Intl.DateTimeFormatOptions): string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#formatNumber)
     *
     * @param value Number to be formatted.
     * @param formatOptions Number format options.
     *
     */
    formatNumber(value: number, formatOptions?: Intl.NumberFormatOptions): string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#substitute)
     *
     * @param template Template string to use for substitution.
     * @param data Data object to be substituted.
     * @param options Options for determining how to substitute keys in the template string.
     *
     */
    substitute(template: string, data: any, options?: SubstituteOptions): string;
  }

  export const intl: intl;

  /**
   * The Web map definition for formatting numbers.  This provides more detail about how a number value should be displayed.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#NumberFormat)
   */
  export interface NumberFormat extends Object {
    /**
     * Indicates if the number should be formatted with a thousands separator.  This is equivalent to [`useGrouping`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat#Parameters).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#NumberFormat)
     */
    digitSeparator?: boolean;
    /**
     * Specifies the number of decimal places that should appear in the formatted number.  Any places beyond this value are rounded.  This is equivalent to defining [`minimumFractionDigits`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat#Parameters)  and [`maximumFractionDigits`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat#Parameters).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#NumberFormat)
     */
    places?: number;
  }

  /**
   * The formatting options for date values.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#SubstituteDateTimeFormatOptions)
   */
  export interface SubstituteDateTimeFormatOptions extends Object {
    /**
     * The type of this format. The value is always `"date"`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#SubstituteDateTimeFormatOptions)
     */
    type: "date";
    /**
     * The date format options for the [Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#SubstituteDateTimeFormatOptions)
     */
    intlOptions: Intl.DateTimeFormatOptions;
  }

  /**
   * The formatting options for numeric values.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#SubstituteNumberFormatOptions)
   */
  export interface SubstituteNumberFormatOptions extends Object {
    /**
     * The type of this format. The value is always `"number"`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#SubstituteNumberFormatOptions)
     */
    type: "number";
    /**
     * The Intl number format options for the [Intl.NumberFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#SubstituteNumberFormatOptions)
     */
    intlOptions: Intl.NumberFormatOptions;
  }

  /**
   * An object to specify substitution options.Use the format property to define the formatting for each value referenced in the string template.`format` is a key-value pair object. Each key can either be:  - a property of the `data` parameter or [`substitute()`](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#substitute)  - a named formatter than can be referenced in the template string.In the following example, the `time` property from `data` will be formatted as a date with each component in numeric format.```jsconst data = {  time: Date.now()};intl.substitute("Date: {time}", data, {  format: {    time: {      type: "date",      intlOptions: {        year: "numeric",        month: "numeric",        day: "numeric",        hour: "numeric",        minute: "numeric"      }    }  }});```The following example uses a named formatter to format the `time` property twice with different formatting options.```jsconst data = {  time: Date.now()};intl.substitute("In {time:monthFormat} of {time:yearFormat}", data, {  format: {    monthFormat: {      type: "date",      intlOptions: {        month: "long"      }    },    yearFormat: {      type: "date",      intlOptions: {        year: "numeric"      }    }  }});```
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#SubstituteOptions)
   */
  export interface SubstituteOptions extends Object {
    /**
     * A hashmap of string keys to formatting options.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#SubstituteOptions)
     */
    format: HashMap<SubstituteDateTimeFormatOptions | SubstituteNumberFormatOptions>;
  }

  interface kernel {
    /**
     * Current version of the ArcGIS API for JavaScript.```jsrequire([  "esri/kernel"], function(esriNS) {  console.log(esriNS.version);});```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-kernel.html#version)
     */
    readonly version: string;
  }

  export const kernel: kernel;

  interface BaseDynamicLayer extends Layer, ScaleRangeLayer, RefreshableLayer {
    /**
     * Adds a promise to the layer's [loadable](https://developers.arcgis.com/javascript/latest/guide/loadable/index.html) chain.This is typically used in the [load()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseDynamicLayer.html#load) method to ensure that all[loadable](https://developers.arcgis.com/javascript/latest/guide/loadable/index.html) resources required for the layerto function are loaded prior to this layer resolving and becoming [loaded](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseDynamicLayer.html#loaded).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseDynamicLayer.html#addResolvingPromise)
     *
     * @param promiseToLoad A promise that must resolve for the layer  to resolve and move from the `loading` [status](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseDynamicLayer.html#loadStatus) to being  [loaded](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseDynamicLayer.html#loaded).
     *
     */
    addResolvingPromise(promiseToLoad: IPromise<any>): IPromise<any>;
    /**
     * This method fetches the image for the specified extent and size. Override this method if the data returnedfrom the server needs to be processed before it can be displayed. For example, if the server returns binarydata, override this method to convert the binary data to an image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseDynamicLayer.html#fetchImage)
     *
     * @param extent The extent of the view. This value is provided by the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
     * @param width The width of the view in pixels. This value is provided by the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
     * @param height The height of the view in pixels. This value is provided by the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
     * @param options The parameter options is an object with the following properties.
     * @param options.signal An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     */
    fetchImage(
      extent: Extent,
      width: number,
      height: number,
      options?: BaseDynamicLayerFetchImageOptions
    ): IPromise<HTMLImageElement | HTMLCanvasElement>;
    /**
     * This method returns a URL to an image for a given extent, width, and height.Override this method to construct the URL for the image based on user interaction.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseDynamicLayer.html#getImageUrl)
     *
     * @param extent Extent of the view. This value is populated by the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
     * @param width Width of the view in pixels. This value is populated by the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
     * @param height Height of the view in pixels. This value is populated by the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
     *
     */
    getImageUrl(extent: Extent, width: number, height: number): IPromise<string> | string;

    on(name: "layerview-create", eventHandler: BaseDynamicLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: BaseDynamicLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: BaseDynamicLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface BaseDynamicLayerConstructor {
    new (properties?: BaseDynamicLayerProperties): BaseDynamicLayer;
  }

  export const BaseDynamicLayer: BaseDynamicLayerConstructor;

  interface BaseDynamicLayerProperties extends LayerProperties, ScaleRangeLayerProperties, RefreshableLayerProperties {}

  export interface BaseDynamicLayerFetchImageOptions extends Object {
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseDynamicLayer.html#fetchImage)
     */
    signal?: AbortSignal;
  }

  export interface BaseDynamicLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface BaseDynamicLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface BaseDynamicLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface BaseElevationLayer extends Layer {
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#spatialReference)
     *
     * @default {@link module:esri/geometry/SpatialReference#WebMercator SpatialReference.WebMercator}
     */
    spatialReference: SpatialReference;
    /**
     * The tiling scheme information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#tileInfo)
     */
    tileInfo: TileInfo;

    /**
     * Adds a promise to the layer's [loadable](https://developers.arcgis.com/javascript/latest/guide/loadable/index.html) chain.This is typically used in the [load()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#load) method to ensure that all[loadable](https://developers.arcgis.com/javascript/latest/guide/loadable/index.html) resources required for the layerto function are loaded prior to this layer resolving and becoming [loaded](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#loaded).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#addResolvingPromise)
     *
     * @param promiseToLoad A promise that must resolve for the layer  to resolve and move from the `loading` [status](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#loadStatus) to being  [loaded](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#loaded).
     *
     */
    addResolvingPromise(promiseToLoad: IPromise<any>): IPromise<any>;
    /**
     * Creates an elevation sampler for the given [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) by querying the service layerfor elevation data and caching it so values may be sampled quickly afterwards. The resolutionof the cached data can be set using the `demResolution` option. In many cases, `auto`demResolution can be used to get high quality elevation samples without theneed to know exactly where the data in the service is located.This is particularly useful for services which combineelevation data from many sources (such as the world elevation service).If more control, or higher quality samples are required, use either`finest-contiguous` or a fixed `{number}` resolution.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#createElevationSampler)
     *
     * @param extent The extent for which to create the sampler.
     * @param options Additional query options. See the table below.
     * @param options.demResolution Controls the horizontal resolution (cell size) in meters from which elevation data is sampled (defaults to `auto`). See [ElevationLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#queryElevation)for more details.
     * @param options.noDataValue The value to use when there is no data available.
     *
     */
    createElevationSampler(
      extent: Extent,
      options?: BaseElevationLayerCreateElevationSamplerOptions
    ): IPromise<ElevationSampler>;
    /**
     * Fetches a tile at the given level, row, and column present in the view.This method must be overwritten to display custom elevation values in the[Map.ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#ground). Note that this method must returna promise that resolves to an object with the properties defined in[ElevationTileData](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#ElevationTileData).See the following samples forexamples of how to overwrite this method:* [Sample - Custom ElevationLayer: Exaggerating elevation](https://developers.arcgis.com/javascript/latest/sample-code/layers-custom-elevation-exaggerated/index.html)* [Sample - Custom ElevationLayer: Thematic data as elevation](https://developers.arcgis.com/javascript/latest/sample-code/layers-custom-elevation-thematic/index.html)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#fetchTile)
     *
     * @param level The level of detail of the tile to fetch.
     * @param row The row (y) position of the tile to fetch.
     * @param column The column (x) position of the tile to fetch.
     * @param options Optional settings for the tile request.
     * @param options.noDataValue The value representing pixels  in the tile that don't contain an elevation value.
     * @param options.signal An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     */
    fetchTile(
      level: number,
      row: number,
      column: number,
      options?: BaseElevationLayerFetchTileOptions
    ): IPromise<ElevationTileData>;
    /**
     * Returns the bounds of the tile as an array of four numbers that canbe readily converted to an [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) object.See the table in the `returns` section below for more details about thevalues returned by this method.This function can be used inside [fetchTile()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#fetchTile) so you can get thebounds of the current tile, convert it to an extent object, and requestthe desired data for the given extent. See the[Custom ElevationLayer: Thematic data as elevation](https://developers.arcgis.com/javascript/latest/sample-code/layers-custom-elevation-thematic/index.html) sample for an example of how this method works.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#getTileBounds)
     *
     * @param level The level of detail (LOD) of the tile.
     * @param row The tile's row (y) position in the dataset.
     * @param column The tiles column (x) position in the dataset.
     * @param out Array for storing the tile bounds or extent.
     *
     */
    getTileBounds(level: number, row: number, column: number, out?: number[]): number[];
    /**
     * Queries the service layer for elevation values for the given geometry. Thereturned result contains a copy of the geometry with z-values sampled fromelevation data from the service. The resolution from which the elevation isqueried can be set using the `demResolution` option. In many cases, `auto`demResolution can be used to get high quality elevation samples without theneed to know exactly where the data in the service is located.This is particularly useful for services which combineelevation data from many sources (such as the world elevation service).If more control, or higher quality samples are required, use either`finest-contiguous` or a fixed `{number}` resolution.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#queryElevation)
     *
     * @param geometry The geometry to use for sampling elevation data.
     * @param options Additional query options. See the table below.
     * @param options.demResolution Controls the horizontal resolution (cell size)  in meters from which elevation data is sampled (defaults to `auto`). See the table below formore details on the different settings.demResolution          | Description-----------------------|-------------`auto`                 | Automatically chooses an appropriate resolution for each coordinate of the input geometry. The current implementation will try to use the finest available resolution given that the total required number of tile requests does not exceed a certain maximum amount (currently 20). Note that this may result in values being sampled from different resolutions.`finest-contiguous`    | Sample elevation from the finest available resolution (cell size) across the entire geometry.`{number}`             | Sample elevation from the resolution closest to the specified resolution (in meters).
     * @param options.returnSampleInfo Indicates whether to return additional sample informationfor each coordinate.
     * @param options.noDataValue The value to use when there is no data available.
     *
     */
    queryElevation(
      geometry: Point | Multipoint | Polyline,
      options?: BaseElevationLayerQueryElevationOptions
    ): IPromise<ElevationLayerElevationQueryResult>;

    on(name: "layerview-create", eventHandler: BaseElevationLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: BaseElevationLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: BaseElevationLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface BaseElevationLayerConstructor {
    new (properties?: BaseElevationLayerProperties): BaseElevationLayer;
  }

  export const BaseElevationLayer: BaseElevationLayerConstructor;

  interface BaseElevationLayerProperties extends LayerProperties {
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#spatialReference)
     *
     * @default {@link module:esri/geometry/SpatialReference#WebMercator SpatialReference.WebMercator}
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * The tiling scheme information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#tileInfo)
     */
    tileInfo?: TileInfoProperties;
  }

  export interface BaseElevationLayerCreateElevationSamplerOptions extends Object {
    /**
     * Controls the horizontal resolution (cell size) in meters from which elevation data is sampled (defaults to `auto`). See [ElevationLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#queryElevation)for more details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#createElevationSampler)
     *
     * @default auto
     */
    demResolution?: number | string;
    /**
     * The value to use when there is no data available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#createElevationSampler)
     *
     * @default 0
     */
    noDataValue?: number;
  }

  export interface BaseElevationLayerFetchTileOptions extends Object {
    /**
     * The value representing pixels  in the tile that don't contain an elevation value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#fetchTile)
     */
    noDataValue?: number;
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#fetchTile)
     */
    signal?: AbortSignal;
  }

  export interface BaseElevationLayerQueryElevationOptions extends Object {
    /**
     * Controls the horizontal resolution (cell size)  in meters from which elevation data is sampled (defaults to `auto`). See the table below formore details on the different settings.demResolution          | Description-----------------------|-------------`auto`                 | Automatically chooses an appropriate resolution for each coordinate of the input geometry. The current implementation will try to use the finest available resolution given that the total required number of tile requests does not exceed a certain maximum amount (currently 20). Note that this may result in values being sampled from different resolutions.`finest-contiguous`    | Sample elevation from the finest available resolution (cell size) across the entire geometry.`{number}`             | Sample elevation from the resolution closest to the specified resolution (in meters).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#queryElevation)
     *
     * @default auto
     */
    demResolution?: number | string;
    /**
     * Indicates whether to return additional sample informationfor each coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#queryElevation)
     *
     * @default false
     */
    returnSampleInfo?: boolean;
    /**
     * The value to use when there is no data available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#queryElevation)
     *
     * @default 0
     */
    noDataValue?: number;
  }

  /**
   * Describes elevation contained in the pixels that comprisean elevation tile.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#ElevationTileData)
   */
  export interface ElevationTileData extends Object {
    /**
     * The elevation values of each pixel in the tile.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#ElevationTileData)
     */
    values: number[];
    /**
     * The width of the tile in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#ElevationTileData)
     */
    width: number;
    /**
     * The height of the tile in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#ElevationTileData)
     */
    height: number;
    /**
     * The maximum allowed error of the Z-value for each  value in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#ElevationTileData)
     */
    maxZError: number;
    /**
     * Indicating the pixel values where no  elevation data is present.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#ElevationTileData)
     */
    noDataValue: number;
  }

  export interface BaseElevationLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface BaseElevationLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface BaseElevationLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface BaseTileLayer extends Layer, ScaleRangeLayer, RefreshableLayer {
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html#spatialReference)
     *
     * @default {@link module:esri/geometry/SpatialReference#WebMercator SpatialReference.WebMercator}
     */
    spatialReference: SpatialReference;
    /**
     * The tiling scheme information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html#tileInfo)
     */
    tileInfo: TileInfo;

    /**
     * Adds a promise to the layer's [loadable](https://developers.arcgis.com/javascript/latest/guide/loadable/index.html) chain.This is typically used in the [load()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html#load) method to ensure that all[loadable](https://developers.arcgis.com/javascript/latest/guide/loadable/index.html) resources required for the layerto function are loaded prior to this layer resolving and becoming [loaded](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html#loaded).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html#addResolvingPromise)
     *
     * @param promiseToLoad A promise that must resolve for the layer  to resolve and move from the `loading` [status](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html#loadStatus) to being  [loaded](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html#loaded).
     *
     */
    addResolvingPromise(promiseToLoad: IPromise<any>): IPromise<any>;
    /**
     * This method fetches a tile for the given level, row and column present in the view. Override this method if the data or imagereturned from the server needs to be processed before it can be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html#fetchTile)
     *
     * @param level Level of detail of the tile to fetch. This value is provided by [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
     * @param row The row (y) position of the tile fetch. This value is provided by [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
     * @param col The column (x) position of the tile to fetch. This value is provided by [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
     * @param options Optional settings for the tile request. The options have the following properties.
     * @param options.timestamp Number to append to the tile request to prevent fetching the tile from the browser cache.
     * @param options.signal An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     */
    fetchTile(
      level: number,
      row: number,
      col: number,
      options?: BaseTileLayerFetchTileOptions
    ): IPromise<HTMLImageElement | HTMLCanvasElement>;
    /**
     * Returns the bounds of the tile as an array of four numbers that be readilyconverted to an [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) object.The value for each item in the array is described in the following table:Index | Value------|------0 | Minimum x-value1 | Minimum y-value2 | Maximum x-value3 | Maximum y-value
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html#getTileBounds)
     *
     * @param level The level of detail (LOD) of the tile.
     * @param row The tile's row (y) position in the dataset.
     * @param column The tiles column (x) position in the dataset.
     * @param out Array for storing the tile bounds or extent.
     *
     */
    getTileBounds(level: number, row: number, column: number, out?: number[]): number[];
    /**
     * This method returns a URL to an image for a given level, row and column.Override this method to construct the URL for the image based on user interaction.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html#getTileUrl)
     *
     * @param level Level of detail. This value is provided by the  [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
     * @param row Tile row. This value is provided by the  [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
     * @param col Tile column. This value is provided by the  [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
     *
     */
    getTileUrl(level: number, row: number, col: number): string;

    on(name: "layerview-create", eventHandler: BaseTileLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: BaseTileLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: BaseTileLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface BaseTileLayerConstructor {
    new (properties?: BaseTileLayerProperties): BaseTileLayer;
  }

  export const BaseTileLayer: BaseTileLayerConstructor;

  interface BaseTileLayerProperties extends LayerProperties, ScaleRangeLayerProperties, RefreshableLayerProperties {
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html#spatialReference)
     *
     * @default {@link module:esri/geometry/SpatialReference#WebMercator SpatialReference.WebMercator}
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * The tiling scheme information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html#tileInfo)
     */
    tileInfo?: TileInfoProperties;
  }

  export interface BaseTileLayerFetchTileOptions extends Object {
    /**
     * Number to append to the tile request to prevent fetching the tile from the browser cache.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html#fetchTile)
     */
    timestamp?: boolean;
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html#fetchTile)
     */
    signal?: AbortSignal;
  }

  export interface BaseTileLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface BaseTileLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface BaseTileLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface BingMapsLayer extends BaseTileLayer {
    /**
     * Expose Bing logo url.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BingMapsLayer.html#bingLogo)
     */
    readonly bingLogo: string;
    /**
     * Copyright information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BingMapsLayer.html#copyright)
     */
    readonly copyright: string;
    /**
     * Provides culture specific map labels. For more information visit:https://msdn.microsoft.com/en-us/library/ff701709.aspxFor a list of supported culture codes please visit:https://msdn.microsoft.com/en-us/library/hh441729.aspx
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BingMapsLayer.html#culture)
     *
     * @default "en-US"
     */
    culture: string;
    /**
     * Indicates if the layer has attribution data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BingMapsLayer.html#hasAttributionData)
     */
    readonly hasAttributionData: boolean;
    /**
     * Bing Maps Key.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BingMapsLayer.html#key)
     *
     * @default null
     */
    key: string;
    /**
     * This will alter Geopolitical disputed borders and labels to align with the specified user region.For more information on Bing's region setting please visit:https://msdn.microsoft.com/en-us/library/ff701704.aspxFor a list of supported country codes please visit:see https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BingMapsLayer.html#region)
     *
     * @default null
     */
    region: string;
    /**
     * The three supported maps are:`road` | `aerial` | `hybrid`For more information on Bing map styles please visit:https://msdn.microsoft.com/en-us/library/ff701716.aspx
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BingMapsLayer.html#style)
     *
     * @default "road"
     */
    style: string;

    on(name: "layerview-create", eventHandler: BingMapsLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: BingMapsLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: BingMapsLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface BingMapsLayerConstructor {
    new (properties?: BingMapsLayerProperties): BingMapsLayer;
  }

  export const BingMapsLayer: BingMapsLayerConstructor;

  interface BingMapsLayerProperties extends BaseTileLayerProperties {
    /**
     * Provides culture specific map labels. For more information visit:https://msdn.microsoft.com/en-us/library/ff701709.aspxFor a list of supported culture codes please visit:https://msdn.microsoft.com/en-us/library/hh441729.aspx
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BingMapsLayer.html#culture)
     *
     * @default "en-US"
     */
    culture?: string;
    /**
     * Bing Maps Key.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BingMapsLayer.html#key)
     *
     * @default null
     */
    key?: string;
    /**
     * This will alter Geopolitical disputed borders and labels to align with the specified user region.For more information on Bing's region setting please visit:https://msdn.microsoft.com/en-us/library/ff701704.aspxFor a list of supported country codes please visit:see https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BingMapsLayer.html#region)
     *
     * @default null
     */
    region?: string;
    /**
     * The three supported maps are:`road` | `aerial` | `hybrid`For more information on Bing map styles please visit:https://msdn.microsoft.com/en-us/library/ff701716.aspx
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BingMapsLayer.html#style)
     *
     * @default "road"
     */
    style?: string;
  }

  export interface BingMapsLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface BingMapsLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface BingMapsLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface BuildingSceneLayer extends Layer, SceneService, PortalLayer, ScaleRangeLayer {
    /**
     * The id of the currently active filter.To activate one of the [filters](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#filters) assign its [id](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#id) to this property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#activeFilterId)
     */
    activeFilterId: string;
    /**
     * A flat [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of all the [sublayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#sublayers)in the BuildingSublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#allSublayers)
     */
    readonly allSublayers: Collection<BuildingGroupSublayer | BuildingComponentSublayer>;
    /**
     * Specifies how features are placed on the vertical axis (z). This propertyonly affects [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html) when using the `absolute-height` mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#elevationInfo)
     */
    elevationInfo: BuildingSceneLayerElevationInfo;
    /**
     * Collection of filters that can be used to show or hide specific features in the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).Using filters is useful when only a subset of the data in the layer should be displayed.To activate a [BuildingFilter](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html) add it to this [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) andassign its [id](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#id) to [activeFilterId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#activeFilterId).Once activated, only the features that satisfy the conditions defined by the [filterBlocks](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#filterBlocks)of the filter are displayed in the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#filters)
     */
    filters: Collection<BuildingFilter>;
    /**
     * Hierarchical structure of sublayers in a BuildingSceneLayer.Usually contains an Overview [BuildingComponentSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html)and a Full Model [BuildingGroupSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingGroupSublayer.html).However, some BuildingSceneLayers can contain only the Full Model [BuildingGroupSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingGroupSublayer.html)or the discipline [BuildingGroupSublayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingGroupSublayer.html) directly.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#sublayers)
     */
    readonly sublayers: Collection<BuildingGroupSublayer | BuildingComponentSublayer>;

    /**
     * Loads the layer and all of its sublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#loadAll)
     *
     *
     */
    loadAll(): IPromise<BuildingSceneLayer>;

    on(name: "layerview-create", eventHandler: BuildingSceneLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: BuildingSceneLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: BuildingSceneLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface BuildingSceneLayerConstructor {
    new (properties?: BuildingSceneLayerProperties): BuildingSceneLayer;

    fromJSON(json: any): BuildingSceneLayer;
  }

  export const BuildingSceneLayer: BuildingSceneLayerConstructor;

  interface BuildingSceneLayerProperties
    extends LayerProperties,
      SceneServiceProperties,
      PortalLayerProperties,
      ScaleRangeLayerProperties {
    /**
     * The id of the currently active filter.To activate one of the [filters](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#filters) assign its [id](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#id) to this property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#activeFilterId)
     */
    activeFilterId?: string;
    /**
     * Specifies how features are placed on the vertical axis (z). This propertyonly affects [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html) when using the `absolute-height` mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#elevationInfo)
     */
    elevationInfo?: BuildingSceneLayerElevationInfo;
    /**
     * Collection of filters that can be used to show or hide specific features in the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).Using filters is useful when only a subset of the data in the layer should be displayed.To activate a [BuildingFilter](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html) add it to this [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) andassign its [id](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#id) to [activeFilterId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#activeFilterId).Once activated, only the features that satisfy the conditions defined by the [filterBlocks](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#filterBlocks)of the filter are displayed in the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#filters)
     */
    filters?: CollectionProperties<BuildingFilterProperties>;
  }

  export interface BuildingSceneLayerElevationInfo extends Object {
    /**
     * Defines how features are placed on the vertical axis (z).Currently only `absolute-height` mode is supported.Mode | Description------|------------absolute-height | Features are placed at an absolute elevation (z-value) above sea level. This z-value is determined by summing up the `offset` value and the point's z-value. It doesn't take the elevation of the terrain into account. This is the only supported elevation mode for a [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#elevationInfo)
     */
    mode: string;
    /**
     * An elevation offset, which is added to the vertical position of each feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#elevationInfo)
     *
     * @default 0
     */
    offset?: number;
    /**
     * The unit for `offset` values.**Possible Values:** feet | meters | kilometers | miles | us-feet | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#elevationInfo)
     *
     * @default meters
     */
    unit?: string;
  }

  export interface BuildingSceneLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface BuildingSceneLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface BuildingSceneLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface BuildingComponentSublayer extends BuildingSublayer, Loadable {
    /**
     * The SQL where clause used to filter features on the client. Only the features that satisfy the definitionexpression are displayed in the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html). Setting a definition expression is usefulwhen only a subset of the data in the layer should be displayed.Setting the definition expression of a layer automatically updates all layer views.If the definition expression is set after the layer has been added to the map, the view willautomatically refresh itself to display the features that satisfy the new definition expression.Important to note is that the initial loading time of the features remains unchanged, even if they are filtered.This happens because, as opposed to Feature Layers, feature filtering is done client-side. As a result all features need to be downloaded always for filter evaluation.This property is evaluated on the client using the cached attributes and it only supports[standardized SQL](http://doc.arcgis.com/en/arcgis-online/reference/sql-agol.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#definitionExpression)
     */
    definitionExpression: string;
    /**
     * Indicates how the layer should display in the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget.The possible values are listed below.Value | Description------|------------ show | The layer is visible in the table of contents. hide | The layer is hidden in the table of contents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#listMode)
     *
     * @default show
     */
    listMode: "show" | "hide";
    /**
     * 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/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#renderer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#outFields)
     *
     * @default null
     */
    outFields: string[];
    /**
     * 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/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#popupTemplate) to define whatinformation should be displayed in the popup. Alternatively, a default popup template may be automatically used if[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#popupEnabled)
     *
     * @default true
     */
    popupEnabled: boolean;
    /**
     * The popup template for the sublayer. When set, the `popupTemplate`allows users to access attributes and display their values in the[view's popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#popup) when a feature is selectedusing text and/or charts. See the [PopupTemplate sample](https://developers.arcgis.com/javascript/latest/sample-code/intro-popuptemplate/index.html)for an example of how [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) interacts with a[FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html). Setting a [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html)on this layer type is done in the same way as a FeatureLayer.A default popup template is automatically used if no `popupTemplate` has been defined when[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled)is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * The renderer assigned to the sublayer. The renderer defines how tovisualize each feature in the sublayer. Depending on the renderer type,features may be visualized with the same symbol, or with varying symbolsbased on the values of provided attribute fields or functions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#renderer)
     */
    renderer: Renderer;
    /**
     * The type for this sublayer is always `building-component`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#type)
     */
    readonly type: "building-component";

    /**
     * Creates a default popup template for the layer, populated with all the fields of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#createPopupTemplate)
     *
     * @param options Options for creating the popup template.
     * @param options.maximumFields The maximum number of fields to include in the  popup template.
     * @param options.ignoreFieldTypes Field types to ignore when creating the popup.  By default the `geometry`, `blob`, `raster`, `guid` and `xml` field types are ignored.
     *
     */
    createPopupTemplate(options?: BuildingComponentSublayerCreatePopupTemplateOptions): PopupTemplate;
    /**
     * Returns the [Field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html) instance for a field name (case-insensitive).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#getField)
     *
     * @param fieldName Name of the field.
     *
     */
    getField(fieldName: string): Field;
    /**
     * Returns the [Domain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Domain.html) associated with the given field name. The domain can be either a[CodedValueDomain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-CodedValueDomain.html) or [RangeDomain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RangeDomain.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#getFieldDomain)
     *
     * @param fieldName Name of the field.
     *
     */
    getFieldDomain(fieldName: string): Domain;
  }

  interface BuildingComponentSublayerConstructor {
    new (properties?: BuildingComponentSublayerProperties): BuildingComponentSublayer;

    fromJSON(json: any): BuildingComponentSublayer;
  }

  export const BuildingComponentSublayer: BuildingComponentSublayerConstructor;

  interface BuildingComponentSublayerProperties extends BuildingSublayerProperties, LoadableProperties {
    /**
     * The SQL where clause used to filter features on the client. Only the features that satisfy the definitionexpression are displayed in the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html). Setting a definition expression is usefulwhen only a subset of the data in the layer should be displayed.Setting the definition expression of a layer automatically updates all layer views.If the definition expression is set after the layer has been added to the map, the view willautomatically refresh itself to display the features that satisfy the new definition expression.Important to note is that the initial loading time of the features remains unchanged, even if they are filtered.This happens because, as opposed to Feature Layers, feature filtering is done client-side. As a result all features need to be downloaded always for filter evaluation.This property is evaluated on the client using the cached attributes and it only supports[standardized SQL](http://doc.arcgis.com/en/arcgis-online/reference/sql-agol.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#definitionExpression)
     */
    definitionExpression?: string;
    /**
     * Indicates how the layer should display in the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget.The possible values are listed below.Value | Description------|------------ show | The layer is visible in the table of contents. hide | The layer is hidden in the table of contents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#listMode)
     *
     * @default show
     */
    listMode?: "show" | "hide";
    /**
     * 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/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#renderer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#outFields)
     *
     * @default null
     */
    outFields?: string[];
    /**
     * 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/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#popupTemplate) to define whatinformation should be displayed in the popup. Alternatively, a default popup template may be automatically used if[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#popupEnabled)
     *
     * @default true
     */
    popupEnabled?: boolean;
    /**
     * The popup template for the sublayer. When set, the `popupTemplate`allows users to access attributes and display their values in the[view's popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#popup) when a feature is selectedusing text and/or charts. See the [PopupTemplate sample](https://developers.arcgis.com/javascript/latest/sample-code/intro-popuptemplate/index.html)for an example of how [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) interacts with a[FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html). Setting a [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html)on this layer type is done in the same way as a FeatureLayer.A default popup template is automatically used if no `popupTemplate` has been defined when[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled)is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * The renderer assigned to the sublayer. The renderer defines how tovisualize each feature in the sublayer. Depending on the renderer type,features may be visualized with the same symbol, or with varying symbolsbased on the values of provided attribute fields or functions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#renderer)
     */
    renderer?: RendererProperties;
  }

  export interface BuildingComponentSublayerCreatePopupTemplateOptions extends Object {
    /**
     * The maximum number of fields to include in the  popup template.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#createPopupTemplate)
     *
     * @default 75
     */
    maximumFields?: number;
    /**
     * Field types to ignore when creating the popup.  By default the `geometry`, `blob`, `raster`, `guid` and `xml` field types are ignored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#createPopupTemplate)
     */
    ignoreFieldTypes?: string[];
  }

  interface BuildingGroupSublayer extends BuildingSublayer {
    /**
     * Indicates how the layer should display in the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget.The possible values are listed below.Value | Description------|------------ show | The layer is visible in the table of contents. hide | The layer is hidden in the table of contents. hide-children | Hide the children layers from the table of contents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingGroupSublayer.html#listMode)
     *
     * @default show
     */
    listMode: "show" | "hide" | "hide-children";
    /**
     * A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of sublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingGroupSublayer.html#sublayers)
     */
    readonly sublayers: Collection<BuildingGroupSublayer | BuildingComponentSublayer>;
    /**
     * The type for this sublayer is always `building-group`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingGroupSublayer.html#type)
     */
    readonly type: "building-group";

    /**
     * Loads all contained sublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingGroupSublayer.html#loadAll)
     *
     *
     */
    loadAll(): IPromise<BuildingSceneLayer>;
  }

  interface BuildingGroupSublayerConstructor {
    new (properties?: BuildingGroupSublayerProperties): BuildingGroupSublayer;

    fromJSON(json: any): BuildingGroupSublayer;
  }

  export const BuildingGroupSublayer: BuildingGroupSublayerConstructor;

  interface BuildingGroupSublayerProperties extends BuildingSublayerProperties {
    /**
     * Indicates how the layer should display in the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget.The possible values are listed below.Value | Description------|------------ show | The layer is visible in the table of contents. hide | The layer is hidden in the table of contents. hide-children | Hide the children layers from the table of contents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingGroupSublayer.html#listMode)
     *
     * @default show
     */
    listMode?: "show" | "hide" | "hide-children";
  }

  interface BuildingSublayer extends Accessor {
    /**
     * The sublayer's layer id as defined by the Scene Service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingSublayer.html#id)
     */
    readonly id: number;
    /**
     * The modelName is a standard name for each sublayer. For example the sublayercontaining the doors in a building has the modelName "Doors". Use thisproperty to retrieve sublayers in a [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingSublayer.html#modelName)
     */
    readonly modelName: string;
    /**
     * Opacity of the sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingSublayer.html#opacity)
     *
     * @default 1
     */
    opacity: number;
    /**
     * The title of the sublayer used to identify it in places such as the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html)and [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widgets.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingSublayer.html#title)
     */
    title: string;
    /**
     * Indicates if the sublayer is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingSublayer.html#visible)
     *
     * @default true
     */
    visible: boolean;
  }

  interface BuildingSublayerConstructor {
    new (properties?: BuildingSublayerProperties): BuildingSublayer;

    fromJSON(json: any): BuildingSublayer;
  }

  export const BuildingSublayer: BuildingSublayerConstructor;

  interface BuildingSublayerProperties {
    /**
     * Opacity of the sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingSublayer.html#opacity)
     *
     * @default 1
     */
    opacity?: number;
    /**
     * The title of the sublayer used to identify it in places such as the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html)and [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widgets.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingSublayer.html#title)
     */
    title?: string;
    /**
     * Indicates if the sublayer is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingSublayer.html#visible)
     *
     * @default true
     */
    visible?: boolean;
  }

  interface CSVLayer extends Layer, PortalLayer, ScaleRangeLayer, TemporalLayer {
    /**
     * Describes the layer's supported capabilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    readonly capabilities: CSVLayerCapabilities;
    /**
     * Copyright information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#copyright)
     */
    copyright: string;
    /**
     * The SQL where clause used to filter features on the client. Only the features that satisfy the definitionexpression are displayed in the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html). Setting a definition expression is usefulwhen the dataset is large and you don't want to bring all features to the client for analysis.Definition expressions may be set when a layer is constructed prior to it loading in the view orafter it has been added to the map. If the definition expression is set after the layer has been added to the map, the view willautomatically refresh itself to display the features that satisfy the new definition expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#definitionExpression)
     */
    definitionExpression: string;
    /**
     * The column delimiter. See the table below for possible values.| Value  | Description|| --- | --- || `,`    | comma || ` `    | space || `;`    | semicolon || `|`    | pipe || `\t`     | tab-delimited |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#delimiter)
     */
    delimiter: string;
    /**
     * Specifies how graphics are placed on the vertical axis (z). This property may only be usedin a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). See the [ElevationInfo sample](https://developers.arcgis.com/javascript/latest/sample-code/scene-elevationinfo/index.html)for an example of how this property may be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#elevationInfo)
     */
    elevationInfo: CSVLayerElevationInfo;
    /**
     * Configures the method for decluttering overlapping features in the view. If this property is not set (or set to `null`),every feature is drawn individually.Currently this property is only supported in 3D [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) for point features with non-draped[Icons](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html) or [Text](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html)symbol layers.![declutter](https://developers.arcgis.com/javascript/assets/img/samples/city-points-declutter.gif)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#featureReduction)
     */
    featureReduction: CSVLayerFeatureReduction;
    /**
     * An array of fields in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#fields)
     */
    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/api-reference/esri-layers-support-FieldsIndex.html#dateFields) in a layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#fieldsIndex)
     */
    readonly fieldsIndex: FieldsIndex;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#labelingInfo)
     */
    labelingInfo: LabelClass[];
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#labelsVisible)
     *
     * @default true
     */
    labelsVisible: boolean;
    /**
     * The latitude field name.If not specified, the API will look for following field names in the CSV source:"lat", "latitude", "y", "ycenter", "latitude83", "latdecdeg", "POINT-Y".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#latitudeField)
     */
    latitudeField: string;
    /**
     * The longitude field name.If not specified, the API will look for following field names in the CSV source:"lon", "lng", "long", "longitude", "x", "xcenter", "longitude83", "longdecdeg", "POINT-X".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#longitudeField)
     */
    longitudeField: string;
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#fields) containinga unique value or identifier for each feature in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#objectIdField)
     */
    objectIdField: string;
    /**
     * An array of field names to include in the CSVLayer. If not specified, the layer will include all fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#outFields)
     */
    outFields: string[];
    /**
     * 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/api-reference/esri-layers-CSVLayer.html#popupTemplate) to define whatinformation should be displayed in the popup. Alternatively, a default popup template may be automatically used if[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#popupEnabled)
     *
     * @default true
     */
    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](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#popup) when a feature is selectedusing text and/or charts. See the [PopupTemplate sample](https://developers.arcgis.com/javascript/latest/sample-code/intro-popuptemplate/index.html)for an example of how [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) interacts with a[FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html).A default popup template is automatically used if no `popupTemplate` has been defined when[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled)is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * The renderer assigned to the layer. The renderer defines how tovisualize each feature in the layer. Depending on the renderer type,features may be visualized with the same symbol, or with varying symbolsbased on the values of provided attribute fields or functions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#renderer)
     */
    renderer: Renderer;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#screenSizePerspectiveEnabled)
     *
     * @default true
     */
    screenSizePerspectiveEnabled: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#spatialReference)
     *
     * @default SpatialReference.WGS84
     */
    spatialReference: SpatialReference;
    /**
     * The URL of the CSV file.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#url)
     */
    url: string;

    /**
     * Creates a popup template for the layer, populated with all the fields of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#createPopupTemplate)
     *
     * @param options Options for creating the popup template.
     * @param options.maximumFields The maximum number of fields to include in the  popup template.
     * @param options.ignoreFieldTypes Field types to ignore when creating the popup.  By default the `geometry`, `blob`, `raster`, `guid` and `xml` field types are ignored.
     *
     */
    createPopupTemplate(options?: CSVLayerCreatePopupTemplateOptions): PopupTemplate;
    /**
     * Creates query parameters that can be used to fetch features thatsatisfy the layer's current filters, and definitions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#createQuery)
     *
     *
     */
    createQuery(): Query;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#queryExtent)
     *
     * @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 featuresvisible in the view, set the `geometry` parameter in the query object to the view's extent.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryExtent(query?: Query | QueryProperties, options?: CSVLayerQueryExtentOptions): IPromise<any>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#queryFeatureCount)
     *
     * @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 featuresvisible in the view, set the `geometry` parameter in the query object to the view's extent.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryFeatureCount(query?: Query | QueryProperties, options?: CSVLayerQueryFeatureCountOptions): IPromise<number>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#queryFeatures)
     *
     * @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 featuresvisible in the view, set the `geometry` parameter in the query object to the view's extent.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryFeatures(query?: Query | QueryProperties, options?: CSVLayerQueryFeaturesOptions): IPromise<FeatureSet>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#queryObjectIds)
     *
     * @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 featuresvisible in the view, set the `geometry` parameter in the query object to the view's extent.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryObjectIds(query?: Query | QueryProperties, options?: CSVLayerQueryObjectIdsOptions): IPromise<number[]>;

    on(name: "layerview-create", eventHandler: CSVLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: CSVLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: CSVLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface CSVLayerConstructor {
    new (properties?: CSVLayerProperties): CSVLayer;

    fromJSON(json: any): CSVLayer;
  }

  export const CSVLayer: CSVLayerConstructor;

  interface CSVLayerProperties
    extends LayerProperties,
      PortalLayerProperties,
      ScaleRangeLayerProperties,
      TemporalLayerProperties {
    /**
     * Copyright information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#copyright)
     */
    copyright?: string;
    /**
     * The SQL where clause used to filter features on the client. Only the features that satisfy the definitionexpression are displayed in the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html). Setting a definition expression is usefulwhen the dataset is large and you don't want to bring all features to the client for analysis.Definition expressions may be set when a layer is constructed prior to it loading in the view orafter it has been added to the map. If the definition expression is set after the layer has been added to the map, the view willautomatically refresh itself to display the features that satisfy the new definition expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#definitionExpression)
     */
    definitionExpression?: string;
    /**
     * The column delimiter. See the table below for possible values.| Value  | Description|| --- | --- || `,`    | comma || ` `    | space || `;`    | semicolon || `|`    | pipe || `\t`     | tab-delimited |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#delimiter)
     */
    delimiter?: string;
    /**
     * Specifies how graphics are placed on the vertical axis (z). This property may only be usedin a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). See the [ElevationInfo sample](https://developers.arcgis.com/javascript/latest/sample-code/scene-elevationinfo/index.html)for an example of how this property may be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#elevationInfo)
     */
    elevationInfo?: CSVLayerElevationInfo;
    /**
     * Configures the method for decluttering overlapping features in the view. If this property is not set (or set to `null`),every feature is drawn individually.Currently this property is only supported in 3D [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) for point features with non-draped[Icons](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html) or [Text](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html)symbol layers.![declutter](https://developers.arcgis.com/javascript/assets/img/samples/city-points-declutter.gif)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#featureReduction)
     */
    featureReduction?: CSVLayerFeatureReduction;
    /**
     * An array of fields in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#fields)
     */
    fields?: FieldProperties[];
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#labelingInfo)
     */
    labelingInfo?: LabelClassProperties[];
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#labelsVisible)
     *
     * @default true
     */
    labelsVisible?: boolean;
    /**
     * The latitude field name.If not specified, the API will look for following field names in the CSV source:"lat", "latitude", "y", "ycenter", "latitude83", "latdecdeg", "POINT-Y".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#latitudeField)
     */
    latitudeField?: string;
    /**
     * The longitude field name.If not specified, the API will look for following field names in the CSV source:"lon", "lng", "long", "longitude", "x", "xcenter", "longitude83", "longdecdeg", "POINT-X".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#longitudeField)
     */
    longitudeField?: string;
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#fields) containinga unique value or identifier for each feature in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#objectIdField)
     */
    objectIdField?: string;
    /**
     * An array of field names to include in the CSVLayer. If not specified, the layer will include all fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#outFields)
     */
    outFields?: string[];
    /**
     * 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/api-reference/esri-layers-CSVLayer.html#popupTemplate) to define whatinformation should be displayed in the popup. Alternatively, a default popup template may be automatically used if[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#popupEnabled)
     *
     * @default true
     */
    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](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#popup) when a feature is selectedusing text and/or charts. See the [PopupTemplate sample](https://developers.arcgis.com/javascript/latest/sample-code/intro-popuptemplate/index.html)for an example of how [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) interacts with a[FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html).A default popup template is automatically used if no `popupTemplate` has been defined when[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled)is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * The renderer assigned to the layer. The renderer defines how tovisualize each feature in the layer. Depending on the renderer type,features may be visualized with the same symbol, or with varying symbolsbased on the values of provided attribute fields or functions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#renderer)
     */
    renderer?: RendererProperties;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#screenSizePerspectiveEnabled)
     *
     * @default true
     */
    screenSizePerspectiveEnabled?: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#spatialReference)
     *
     * @default SpatialReference.WGS84
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * The URL of the CSV file.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#url)
     */
    url?: string;
  }

  export interface CSVLayerCapabilities extends Object {
    /**
     * Describes characteristics of the data in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    data: CSVLayerCapabilitiesData;
    /**
     * Describes editing capabilities that can be performed on the features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    editing: CSVLayerCapabilitiesEditing;
    /**
     * Describes operations that can be performed on features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    operations: CSVLayerCapabilitiesOperations;
    /**
     * Describes [query](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html)operations that can be performed on features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    query: CSVLayerCapabilitiesQuery;
    /**
     * Indicates if the layer's query operation supports querying features or records related to features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    queryRelated: CSVLayerCapabilitiesQueryRelated;
  }

  export interface CSVLayerCapabilitiesData extends Object {
    /**
     * Indicates if the attachment is enabled on the layer. At this current time, the CSVLayer doesn’t support attachments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsAttachment: boolean;
    /**
     * Indicates if the features in the layer support M values. Requires ArcGIS Server service 10.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsM: boolean;
    /**
     * Indicates if the features in the layer support Z values. Requires ArcGIS Server service 10.1 or greater.See [elevationInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#elevationInfo) for details regarding placement andrendering of features with z-values in 3D [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsZ: boolean;
  }

  export interface CSVLayerCapabilitiesEditing extends Object {
    /**
     * Indicates if anonymous users can delete features created by others.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsDeleteByAnonymous: boolean;
    /**
     * Indicates if logged in users can delete features created by others.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsDeleteByOthers: boolean;
    /**
     * Indicates if the geometry of the features in the layer can be edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsGeometryUpdate: boolean;
    /**
     * Indicates if the `globalid` values provided by the client are used in [applyEdits](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#applyEdits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsGlobalId: boolean;
    /**
     * Indicates if the `rollbackOnFailure` parameter can be set to `true` or `false` when running the synchronizeReplica operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsRollbackOnFailure: boolean;
    /**
     * Indicates if anonymous users can update features created by others.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsUpdateByAnonymous: boolean;
    /**
     * Indicates if logged in users can update features created by others.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsUpdateByOthers: boolean;
    /**
     * Indicates if `m-values` must be provided when updating features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsUpdateWithoutM: boolean;
    /**
     * Indicates if the layer supports uploading attachments by [UploadId](https://developers.arcgis.com/rest/services-reference/item.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsUploadWithItemId: boolean;
  }

  export interface CSVLayerCapabilitiesOperations extends Object {
    /**
     * Indicates if new features can be [added](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#applyEdits) to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsAdd: boolean;
    /**
     * Indicates if features can be [deleted](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#applyEdits) from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsDelete: boolean;
    /**
     * Indicates if features in the layer can be [updated](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#applyEdits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsUpdate: boolean;
    /**
     * Indicates if features in the layer can be [edited](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#applyEdits). Use `supportsAdd`, `supportsUpdate` and `supportsDelete` to determine which editing operations are supported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsEditing: boolean;
    /**
     * Indicates if values of one or more field values in the layercan be updated. See the [Calculate REST operation](https://developers.arcgis.com/rest/services-reference/calculate-feature-service-layer-.htm)document for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsCalculate: boolean;
    /**
     * Indicates if features in the layer can be [queried](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#queryFeatures).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsQuery: boolean;
    /**
     * Indicates if the layer supports[REST API queryAttachments](https://developers.arcgis.com/rest/services-reference/query-attachments-feature-service-layer-.htm)operation, which is supported with hosted feature services at version 10.5 and greater.If `false`, [queryAttachments() method](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#queryAttachments) can only return attachments for one feature at a time.If `true`, `queryAttachments()` can return attachments for array of [objectIds](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#objectIds).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsQueryAttachments: boolean;
    /**
     * Indicates if the layer supports a SQL-92 expression or where clause. This operation isonly supported in ArcGIS Online hosted feature services.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsValidateSql: boolean;
    /**
     * Indicates if resized attachments are supported in the layer.This is useful for showing thumbnails in [Popups](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsResizeAttachments: boolean;
  }

  export interface CSVLayerCapabilitiesQuery extends Object {
    /**
     * Indicates if the geometry centroid associated with each polygon feature can be returned. This operation isonly supported in ArcGIS Online hosted feature services.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsCentroid: boolean;
    /**
     * Indicates if the layer's query operation supports a buffer distance for input geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsDistance: boolean;
    /**
     * Indicates if the layer supports queries for distinct values based on fields specified in the [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#outFields).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsDistinct: boolean;
    /**
     * Indicates if the query operation supports `disjoint` [spatial relationship](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#spatialRelationship). This is valid only for[hosted feature services](http://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsDisjointSpatialRelationship: boolean;
    /**
     * Indicates if the layer's query response includes the extent of features.At 10.3, this option is only available for hosted feature services. At 10.3.1, it is available for hosted and non-hosted feature services.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsExtent: boolean;
    /**
     * Indicates if the layer's query response contains geometry attributes, including shape area and length attributes.This operation is only supported in ArcGIS Online hosted feature services.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsGeometryProperties: boolean;
    /**
     * Indicates if the layer supports the [having](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#having) clause on the service. Requires an ArcGIS Server service 10.6.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsHavingClause: boolean;
    /**
     * Indicates if features returned in the query response can be ordered by one or more fields. Requires an ArcGIS Server service 10.3 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsOrderBy: boolean;
    /**
     * Indicates if the query response supports pagination. Requires an ArcGIS Server service 10.3 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsPagination: boolean;
    /**
     * Indicates if the query response includes the [query geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#queryGeometry). This is valid only for[hosted feature services](http://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsQueryGeometry: boolean;
    /**
     * Indicates if the query operation supports the projection of geometries onto a virtual grid. Requires an ArcGIS Server service 10.6.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsQuantization: boolean;
    /**
     * Indicates if the query operation supports quantization designed to be used in edit mode (highest resolution at the given spatial reference). Requires an ArcGIS Server service 10.6.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsQuantizationEditMode: boolean;
    /**
     * Indicates if the number of features returned by the query operation can be controlled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsResultType: boolean;
    /**
     * Indicates if the query operation supports SQL expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsSqlExpression: boolean;
    /**
     * Indicates if the query operation supports using standardized queries.Learn more about [standardized queries here](http://server.arcgis.com/en/server/latest/administer/linux/about-standardized-queries.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsStandardizedQueriesOnly: boolean;
    /**
     * Indicates if the layer supports field-based statistical functions. Requires ArcGIS Server service 10.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsStatistics: boolean;
    /**
     * Indicates if the layer supports historic moment query. Requires ArcGIS Server service 10.5 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsHistoricMoment: boolean;
  }

  export interface CSVLayerCapabilitiesQueryRelated extends Object {
    /**
     * Indicates if the layer's query response includes the number of features or records related to features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsCount: boolean;
    /**
     * Indicates if the related features or records returned in the query response can be ordered by one or more fields.Requires ArcGIS Server service 10.3 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsOrderBy: boolean;
    /**
     * Indicates if the query response supports pagination for related features or records. Requires ArcGIS Server service 10.3 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsPagination: boolean;
  }

  export interface CSVLayerCreatePopupTemplateOptions extends Object {
    /**
     * The maximum number of fields to include in the  popup template.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#createPopupTemplate)
     *
     * @default 75
     */
    maximumFields?: number;
    /**
     * Field types to ignore when creating the popup.  By default the `geometry`, `blob`, `raster`, `guid` and `xml` field types are ignored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#createPopupTemplate)
     */
    ignoreFieldTypes?: string[];
  }

  export interface CSVLayerElevationInfo extends Object {
    /**
     * Defines how the graphic is placed with respect to the terrain surface.See the table below for a list of possible values.Mode | Description------|------------on-the-ground | Graphics are draped on the terrain surface. This is the default value for [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometries rendered with [ObjectSymbol3DLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html).relative-to-ground | Graphics are placed at an elevation relative to the terrain surface. The graphic's elevation is determined by summing up the terrain elevation and the result of `featureExpressionInfo` (if defined). This is the default value for [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometries rendered with [IconSymbol3DLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html).absolute-height | Graphics are placed at an absolute elevation (z-value) above sea level. This z-value is determined by the result of `featureExpressionInfo` (if defined). This mode doesn't take the elevation of the terrain into account.relative-to-scene | Graphics are aligned to buildings and other objects part of 3D Object [SceneLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html) or [IntegratedMeshLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html), depending on which has higher elevation. If the graphic is not directly above a building or any other feature, it is aligned to the terrain surface elevation. If defined, the result of `featureExpressionInfo` is added to the 3D Object/terrain surface elevation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#elevationInfo)
     */
    mode: string;
    /**
     * An elevation offset, which is added to the vertical position of the graphic. If `unit` is not defined,the offset is in `meters`.When `mode = "on-the-ground"`, this property has no effect.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#elevationInfo)
     */
    offset?: number;
    /**
     * This object contains information about setting a custom z-value on the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#elevationInfo)
     */
    featureExpressionInfo?: CSVLayerElevationInfoFeatureExpressionInfo;
    /**
     * The unit for `featureExpressionInfo` and `offset` values.**Possible Values:** feet | meters | kilometers | miles | us-feet | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#elevationInfo)
     */
    unit?: string;
  }

  export interface CSVLayerElevationInfoFeatureExpressionInfo extends Object {
    /**
     * An [Arcade expression](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) evaluating to a number that determines the z-value of the feature. When `mode = "on-the-ground"`, this property has no effect. For line and polygon geometries the result of the expression is the same for all vertices of a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#elevationInfo)
     */
    expression?: string;
  }

  export interface CSVLayerFeatureReduction extends Object {
    /**
     * Type of the decluttering method. The only supported type at the moment is`selection`. In this method, some of the overlapping features are hidden such that none of the remaining featuresintersect on screen. Label deconfliction also respects this option and hides labels that would overlap with the features of this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#featureReduction)
     */
    type: string;
  }

  export interface CSVLayerQueryExtentOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#queryExtent)
     */
    signal?: AbortSignal;
  }

  export interface CSVLayerQueryFeatureCountOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#queryFeatureCount)
     */
    signal?: AbortSignal;
  }

  export interface CSVLayerQueryFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#queryFeatures)
     */
    signal?: AbortSignal;
  }

  export interface CSVLayerQueryObjectIdsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#queryObjectIds)
     */
    signal?: AbortSignal;
  }

  export interface CSVLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface CSVLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface CSVLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface ElevationLayer extends Layer, ArcGISCachedService, PortalLayer {
    /**
     * URL pointing to the Elevation layer resource on an ArcGIS Image Server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#url)
     */
    url: string;

    /**
     * Creates an elevation sampler for the given [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) by querying the service layerfor elevation data and caching it so values may be sampled quickly afterwards. The resolutionof the cached data can be set using the `demResolution` option. In many cases, `auto`demResolution can be used to get high quality elevation samples without theneed to know exactly where the data in the service is located.This is particularly useful for services which combineelevation data from many sources (such as the world elevation service).If more control, or higher quality samples are required, use either`finest-contiguous` or a fixed `{number}` resolution.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#createElevationSampler)
     *
     * @param extent The extent for which to create the sampler.
     * @param options Additional query options. See the table below.
     * @param options.demResolution Controls the horizontal resolution (cell size) in meters from which elevation data is sampled (defaults to `auto`). See [ElevationLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#queryElevation)for more details.
     * @param options.noDataValue The value to use when there is no data available.
     *
     */
    createElevationSampler(
      extent: Extent,
      options?: ElevationLayerCreateElevationSamplerOptions
    ): IPromise<ElevationSampler>;
    /**
     * Requests a tile from the service and decodes the data into a lineararray of elevation values.The returned promise resolves with a plain object describing the obtainedelevation data for the tile. The object has the following properties:Property  | Type         | Description----------|--------------|------------values    | Float32Array | The elevation values contained in the tile.width     | number       | The number of elevation values in one row of the tile.height    | number       | The number of elevation values in one column of the tile.maxZError | number       | The upper bound for the compression error on the elevation values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#fetchTile)
     *
     * @param level the tile level.
     * @param row the tile row.
     * @param column the tile column.
     * @param options Optional settings for the tile request.
     * @param options.noDataValue The value representing pixels  in the tile that don't contain an elevation value.
     * @param options.signal An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     */
    fetchTile(
      level: number,
      row: number,
      column: number,
      options?: ElevationLayerFetchTileOptions
    ): IPromise<ElevationTileData>;
    /**
     * This method returns a URL to a tile for a given level, row and column.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#getTileUrl)
     *
     * @param level The requested tile's level.
     * @param row The requested tile's row.
     * @param col The requested tile's column.
     *
     */
    getTileUrl(level: number, row: number, col: number): string;
    /**
     * Queries the service layer for elevation values for the given geometry. Thereturned result contains a copy of the geometry with z-values sampled fromelevation data from the service. The resolution from which the elevation isqueried can be set using the `demResolution` option. In many cases, `auto`demResolution can be used to get high quality elevation samples without theneed to know exactly where the data in the service is located.This is particularly useful for services which combineelevation data from many sources (such as the world elevation service).If more control, or higher quality samples are required, use either`finest-contiguous` or a fixed `{number}` resolution.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#queryElevation)
     *
     * @param geometry The geometry to use for sampling elevation data.
     * @param options Additional query options. See the table below.
     * @param options.demResolution Controls the horizontal resolution (cell size)  in meters from which elevation data is sampled (defaults to `auto`). See the table below formore details on the different settings.demResolution          | Description-----------------------|-------------`auto`                 | Automatically chooses an appropriate resolution for each coordinate of the input geometry. The current implementation will try to use the finest available resolution given that the total required number of tile requests does not exceed a certain maximum amount (currently 20). Note that this may result in values being sampled from different resolutions.`finest-contiguous`    | Sample elevation from the finest available resolution (cell size) across the entire geometry.`{number}`             | Sample elevation from the resolution closest to the specified resolution (in meters).
     * @param options.returnSampleInfo Indicates whether to return additional sample information  for each coordinate.
     * @param options.noDataValue The value to use when there is no data available.
     * @param options.signal An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     */
    queryElevation(
      geometry: Point | Multipoint | Polyline,
      options?: ElevationLayerQueryElevationOptions
    ): IPromise<ElevationLayerElevationQueryResult>;

    on(name: "layerview-create", eventHandler: ElevationLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: ElevationLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: ElevationLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface ElevationLayerConstructor {
    new (properties?: ElevationLayerProperties): ElevationLayer;

    fromJSON(json: any): ElevationLayer;
  }

  export const ElevationLayer: ElevationLayerConstructor;

  interface ElevationLayerProperties extends LayerProperties, ArcGISCachedServiceProperties, PortalLayerProperties {
    /**
     * URL pointing to the Elevation layer resource on an ArcGIS Image Server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#url)
     */
    url?: string;
  }

  export interface ElevationLayerCreateElevationSamplerOptions extends Object {
    /**
     * Controls the horizontal resolution (cell size) in meters from which elevation data is sampled (defaults to `auto`). See [ElevationLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#queryElevation)for more details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#createElevationSampler)
     *
     * @default auto
     */
    demResolution?: number | string;
    /**
     * The value to use when there is no data available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#createElevationSampler)
     *
     * @default 0
     */
    noDataValue?: number;
  }

  export interface ElevationLayerFetchTileOptions extends Object {
    /**
     * The value representing pixels  in the tile that don't contain an elevation value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#fetchTile)
     */
    noDataValue?: number;
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#fetchTile)
     */
    signal?: AbortSignal;
  }

  export interface ElevationLayerQueryElevationOptions extends Object {
    /**
     * Controls the horizontal resolution (cell size)  in meters from which elevation data is sampled (defaults to `auto`). See the table below formore details on the different settings.demResolution          | Description-----------------------|-------------`auto`                 | Automatically chooses an appropriate resolution for each coordinate of the input geometry. The current implementation will try to use the finest available resolution given that the total required number of tile requests does not exceed a certain maximum amount (currently 20). Note that this may result in values being sampled from different resolutions.`finest-contiguous`    | Sample elevation from the finest available resolution (cell size) across the entire geometry.`{number}`             | Sample elevation from the resolution closest to the specified resolution (in meters).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#queryElevation)
     *
     * @default auto
     */
    demResolution?: number | string;
    /**
     * Indicates whether to return additional sample information  for each coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#queryElevation)
     *
     * @default false
     */
    returnSampleInfo?: boolean;
    /**
     * The value to use when there is no data available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#queryElevation)
     *
     * @default 0
     */
    noDataValue?: number;
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#queryElevation)
     */
    signal?: AbortSignal;
  }

  /**
   * Object returned when [queryElevation()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#queryElevation) promise resolves:
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#ElevationQueryResult)
   */
  export interface ElevationLayerElevationQueryResult extends Object {
    /**
     * The geometry with sampled z-values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#ElevationQueryResult)
     */
    geometry: Point | Multipoint | Polyline;
    /**
     * Contains additional information about how the geometry was sampled.                                  This property is present depending on whether the user set `options.returnSampleInfo = true`,                                  for each coordinate in the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#ElevationQueryResult)
     */
    sampleInfo?: ElevationLayerElevationQueryResultSampleInfo[];
    /**
     * The value used when there is no data available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#ElevationQueryResult)
     */
    noDataValue: number;
  }

  export interface ElevationLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface ElevationLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface ElevationLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  export interface ElevationLayerElevationQueryResultSampleInfo extends Object {
    /**
     * The resolution at which the z-value was sampled.                                  If no data was available for sampling for a given coordinate,                                  the dem resolution value will be -1 for that coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#ElevationQueryResult)
     */
    demResolution: number;
  }

  interface FeatureLayer extends Layer, PortalLayer, ScaleRangeLayer, RefreshableLayer, TemporalLayer {
    /**
     * Describes the layer's supported capabilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    readonly capabilities: FeatureLayerCapabilities;
    /**
     * Copyright information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#copyright)
     */
    copyright: string;
    /**
     * The SQL where clause used to filter features on the client. Only the features that satisfy the definitionexpression are displayed in the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html). Setting a definition expression is usefulwhen the dataset is large and you don't want to bring all features to the client for analysis.Definition expressions may be set when a layer is constructed prior to it loading in the view orafter it has been added to the map. If the definition expression is set after the layer has been added to the map, the view willautomatically refresh itself to display the features that satisfy the new definition expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#definitionExpression)
     */
    definitionExpression: string;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#displayField)
     */
    displayField: string;
    /**
     * An object that allows you to create a dynamic layer with dataeither from map service sublayers or data from a registered workspace.See [DynamicMapLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicMapLayer)for creating dynamic layers from map service layers for on the flyrendering, labeling, and filtering (definition expressions). To createdynamic layers from other sources in registered workspaces such as tables and table joins,see [DynamicDataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicDataLayer).If you already have a [Sublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html) instance, youcan call the [createFeatureLayer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#createFeatureLayer)method on the Sublayer to construct the layer for you.This only applies to map services with[dynamic layers](https://enterprise.arcgis.com/en/server/latest/publish-services/linux/about-dynamic-layers.htm) enabled.Therefore, the [url](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#url) of the FeatureLayer instance must point to a map service urlending with `/dynamicLayer`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#dynamicDataSource)
     */
    dynamicDataSource: DynamicMapLayer | DynamicDataLayer;
    /**
     * The editor tracking fields, which record who adds or edits the data through the feature serviceand when edits are made.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#editFieldsInfo)
     */
    readonly editFieldsInfo: EditFieldsInfo;
    /**
     * If present, this value specifies information about editing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#editingInfo)
     */
    readonly editingInfo: EditingInfo;
    /**
     * Specifies how features are placed on the vertical axis (z). This property may only be usedin a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). See the [ElevationInfo sample](https://developers.arcgis.com/javascript/latest/sample-code/scene-elevationinfo/index.html)for an example of how this property may be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#elevationInfo)
     */
    elevationInfo: FeatureLayerElevationInfo;
    /**
     * Configures the method for decluttering overlapping features in the view. If this property is not set (or set to `null`),every feature is drawn individually.Currently this property is only supported in 3D [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) for point features with non-draped[Icons](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html) or [Text](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html)symbol layers.![declutter](https://developers.arcgis.com/javascript/assets/img/samples/city-points-declutter.gif)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#featureReduction)
     */
    featureReduction: FeatureLayerFeatureReduction;
    /**
     * An array of fields in the layer. Each field represents an attributethat may contain a value for each feature in the layer. For example,a field named `POP_2015`, stores information about total population as anumeric value for each feature; this value represents the total numberof people living within the geographic bounds of the feature.This property must be set in the constructor when creating a FeatureLayerfrom client-side [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html). To create FeatureLayers fromclient-side features you must also set the [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#source),[objectIdField](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#objectIdField), [spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#spatialReference),[geometryType](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#geometryType), [renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#renderer), and [type](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#type) properties.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#fields)
     */
    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/api-reference/esri-layers-support-FieldsIndex.html#dateFields) in a layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#fieldsIndex)
     */
    readonly fieldsIndex: FieldsIndex;
    /**
     * The version of the geodatabase of the feature service data. Readthe [Overview of versioning](https://desktop.arcgis.com/en/arcmap/latest/manage-data/geodatabases/an-overview-of-versioning.htm) topic for more detailsabout this capability.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#gdbVersion)
     */
    readonly gdbVersion: string;
    /**
     * The geometry type of features in the layer. All features must be of the same type.This property is read-only when the layer is created from a [url](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#url).When creating a FeatureLayer from client-side features, this property isinferred by the geometryType of the features provided in the layer's [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#source)property.**Possible Values:** point | multipoint | polyline | polygon | multipatch | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#geometryType)
     */
    geometryType: string;
    /**
     * Indicates whether the client-side features in the layer have `M` (measurement) values.Use the `supportsM` property in the FeatureLayer's [capabilities.data](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)object to verify if `M` values are supported on [feature service](https://developers.arcgis.com/rest/services-reference/feature-service.htm) features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#hasM)
     *
     * @default undefined
     */
    readonly hasM: boolean;
    /**
     * Indicates whether the client-side features in the layer have `Z` (elevation) values.Refer to [elevationInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#elevationInfo) for details regarding placement and renderingof features with z-values in 3D [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).Use the `supportsZ` property in the FeatureLayer's [capabilities.data](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)object to verify if `Z` values are supported on [feature service](https://developers.arcgis.com/rest/services-reference/feature-service.htm) features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#hasZ)
     *
     * @default undefined
     */
    readonly hasZ: boolean;
    /**
     * The historic moment to query. If historicMoment is not specified, the querywill apply to the current features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#historicMoment)
     */
    historicMoment: Date;
    /**
     * Returns `true` if the layer is loaded from a non-spatial table in a service. Non-spatial table does not havea spatial column that represents geographic features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#isTable)
     *
     * @default false
     */
    isTable: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#labelingInfo)
     */
    labelingInfo: LabelClass[];
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#labelsVisible)
     *
     * @default true
     */
    labelsVisible: boolean;
    /**
     * The layer ID, or layer index, of a Feature Service layer. This is particularly useful whenloading a single FeatureLayer with the [portalItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#portalItem) property from a service containingmultiple layers. You can specify this value in one of two scenarios:* When loading the layer via the [portalItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#portalItem) property.* When pointing the layer [url](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#url) directly to the Feature Service.If a layerId is not specified in either of the above scenarios, then the first layerin the service (`layerId = 0`) is selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#layerId)
     */
    layerId: number;
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled: boolean;
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#fields) containinga unique value or identifier for each feature in the layer.This is required when constructing a FeatureLayer from a collectionof client-side [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#objectIdField)
     */
    objectIdField: string;
    /**
     * 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/api-reference/esri-layers-FeatureLayer.html#renderer),[labeling](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#labelingInfo) and setting the [elevation info](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#elevationInfo) for the layer.The required fields and `outFields` are used to populate[FeatureLayerView.availableFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#availableFields).Set this property to include the fields that will be used for client-side[queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryFeatures)if the fields are not part of required fields used for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#outFields)
     *
     * @default null
     */
    outFields: string[];
    /**
     * 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/api-reference/esri-layers-FeatureLayer.html#popupTemplate) to define whatinformation should be displayed in the popup. Alternatively, a default popup template may be automatically used if[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#popupEnabled)
     *
     * @default true
     */
    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](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#popup) when a feature is selectedusing text and/or charts. See the [PopupTemplate sample](https://developers.arcgis.com/javascript/latest/sample-code/intro-popuptemplate/index.html)for an example of how [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) interacts with a[FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html).A default popup template is automatically used if no `popupTemplate` has been defined when[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled)is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * Array of [relationships](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html) set up for the layer. Each object in the array describes the layer's[relationship](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html) with another layer or table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#relationships)
     */
    readonly relationships: Relationship[];
    /**
     * The renderer assigned to the layer. The renderer defines how tovisualize each feature in the layer. Depending on the renderer type,features may be visualized with the same symbol, or with varying symbolsbased on the values of provided attribute fields or functions.However, when creating a FeatureLayer from client-side features, this property mustbe specified in the layer's constructor along with the[source](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#source),[fields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#fields), [objectIdField](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#objectIdField) properties.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#renderer)
     */
    renderer: Renderer;
    /**
     * When `true`, indicates that M values will be returned. When`false`, indicates that M values will never be returned. The layer viewdetermines whether to include M values in feature queries when theproperty value is `undefined`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#returnM)
     *
     * @default undefined
     */
    returnM: boolean;
    /**
     * When `true`, indicates that Z values will always be returned. When`false`, indicates that Z values will never be returned. The layer viewdetermines whether to include Z values in feature queries when theproperty value is `undefined`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#returnZ)
     *
     * @default undefined
     */
    returnZ: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#screenSizePerspectiveEnabled)
     *
     * @default true
     */
    screenSizePerspectiveEnabled: boolean;
    /**
     * A collection of [Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) objects used to create a FeatureLayer.The geometry of each feature all must have a matching [geometryType](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#geometryType).This property should only be used when creating a FeatureLayer from client-side features.When creating a FeatureLayer from client-side features, the [fields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#fields),[objectIdField](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#objectIdField), [renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#renderer), and [type](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#type) properties must also be set.Use [applyEdits()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits) method to add, remove, and update featuresfrom a layer at runtime. Once `applyEdits()` resolves successfully, use [queryFeatures()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryFeatures)to return updated features.The [spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#spatialReference) and [geometryType](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#geometryType) propertiesare determined based on the features provided to this property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#source)
     */
    source: Collection<Graphic>;
    /**
     * The spatial reference of the layer. When creating the layer from a[url](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#url), the spatial reference is read from the service.When creating a FeatureLayer from client-side features, this property isinferred from the geometries of the features provided in the [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#source)property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#spatialReference)
     */
    spatialReference: SpatialReference;
    /**
     * An array of feature templates defined in the feature layer.See [ArcGIS Pro subtypes document](https://pro.arcgis.com/en/pro-app/help/data/geodatabases/overview/an-overview-of-subtypes.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#templates)
     */
    templates: FeatureTemplate[];
    /**
     * The name of the field holding the type ID or subtypes for the features.See [ArcGIS Pro subtypes document](https://pro.arcgis.com/en/pro-app/help/data/geodatabases/overview/an-overview-of-subtypes.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#typeIdField)
     */
    readonly typeIdField: string;
    /**
     * An array of subtypes defined in the feature service exposed by ArcGIS REST API.Each item includes information about the type, such as the type ID, name, and definition expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#types)
     */
    types: FeatureType[];
    /**
     * The URL of the REST endpoint of the layer, non-spatial table or service. The URL may either point to aresource on ArcGIS Enterprise or ArcGIS Online.If the url points directly to a service, then the layer must be specified in the[layerId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#layerId) property. If no [layerId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#layerId) is given, then the first layer in the service will be loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#url)
     */
    url: string;
    /**
     * The version of ArcGIS Server in which the layer is published.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#version)
     */
    readonly version: number;

    /**
     * Adds an attachment to a feature. This operation is available only if the layer's[capabilities.data.supportsAttachment](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#addAttachment)
     *
     * @param feature Feature to which the attachment is to be added.
     * @param attachment HTML form that contains a file upload field pointing to the file to be added as an attachment.
     *
     */
    addAttachment(feature: Graphic, attachment: HTMLFormElement | FormData): IPromise<FeatureEditResult>;
    /**
     * Applies edits to features in a layer. New features can be created and existingfeatures can be updated or deleted. Feature geometries and/or attributes may be modified.Only applicable to layers in a[feature service](https://developers.arcgis.com/rest/services-reference/feature-service.htm)and client-side features set through the layer's [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#source).If client-side features are added, removed or updated at runtime using [applyEdits()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits)then use [queryFeatures()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryFeatures) to return updated features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits)
     *
     * @param edits Object containing features to be added, updated or deleted.
     * @param edits.addFeatures Array of features to be added.Values of non nullable fields must be provided when adding new features. Date fields must have[numeric](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime) valuesrepresenting universal time.
     * @param edits.updateFeatures Array of features to be updated. Each feature must have valid[objectId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#objectIdField). Values of non nullable fields must be provided when updating features. Date fields must have[numeric](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime) valuesrepresenting universal time.
     * @param edits.deleteFeatures An array of features orobjects to be deleted. When an array of features is passed, each feature must have a valid[objectId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#objectIdField). When an array of objects is used, each object must have a valid`objectId` property.
     *
     */
    applyEdits(edits: FeatureLayerApplyEditsEdits): IPromise<any>;
    /**
     * Creates a popup template for the layer, populated with all the fields of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#createPopupTemplate)
     *
     * @param options Options for creating the popup template.
     * @param options.maximumFields The maximum number of fields to include in the  popup template.
     * @param options.ignoreFieldTypes Field types to ignore when creating the popup.  By default the `geometry`, `blob`, `raster`, `guid` and `xml` field types are ignored.
     *
     */
    createPopupTemplate(options?: FeatureLayerCreatePopupTemplateOptions): PopupTemplate;
    /**
     * Creates query parameter object that can be used to fetch features thatsatisfy the layer's configurations such as [definitionExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#definitionExpression),[gdbVersion](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#gdbVersion), and [historicMoment](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#historicMoment).It will return `Z` and `M` values based on the layer's [data capabilities](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities).It sets the query parameter's [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outFields) property to `["*"]`.The results will include geometries of features and values for all[available fields](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#availableFields) for[client-side queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryFeatures)or all fields in the layer for [server side queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryFeatures).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#createQuery)
     *
     *
     */
    createQuery(): Query;
    /**
     * Deletes attachments from a feature. This operation is available only if the layer's[capabilities.data.supportsAttachment](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#deleteAttachments)
     *
     * @param feature Feature containing attachments to be deleted.
     * @param attachmentIds Ids of the attachments to be deleted.
     *
     */
    deleteAttachments(feature: Graphic, attachmentIds: number[]): IPromise<FeatureEditResult>;
    /**
     * Returns a [FeatureType](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureType.html) describing the feature's type.This is applicable if the layer containing the feature has a [typeIdField](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#typeIdField).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#getFeatureType)
     *
     * @param feature A feature from this layer.
     *
     */
    getFeatureType(feature: Graphic): FeatureType;
    /**
     * Returns the [Field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html) instance for a field name (case-insensitive).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#getField)
     *
     * @param fieldName Name of the field.
     *
     */
    getField(fieldName: string): Field;
    /**
     * Returns the [Domain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Domain.html) associated with the given field name. The domain can be either a[CodedValueDomain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-CodedValueDomain.html) or [RangeDomain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RangeDomain.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#getFieldDomain)
     *
     * @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.
     * @param options.feature The feature to which the [Domain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Domain.html) is assigned.
     *
     */
    getFieldDomain(fieldName: string, options?: FeatureLayerGetFieldDomainOptions): Domain;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryAttachments)
     *
     * @param attachmentQuery Specifies the attachment parameters for query.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryAttachments(
      attachmentQuery: AttachmentQuery | AttachmentQueryProperties,
      options?: FeatureLayerQueryAttachmentsOptions
    ): IPromise<any>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryExtent)
     *
     * @param query Specifies the attributes and spatialfilter of the query. If no parameters are specified, then the extent and count of all featuressatisfying the layer's configuration/filters are returned.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryExtent(query?: Query | QueryProperties, options?: FeatureLayerQueryExtentOptions): IPromise<any>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryFeatureCount)
     *
     * @param query Specifies the attributes andspatial filter of the query. If no parameters are specified, the total number of featuressatisfying the layer's configuration/filters is returned.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryFeatureCount(
      query?: Query | QueryProperties,
      options?: FeatureLayerQueryFeatureCountOptions
    ): IPromise<number>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryFeatures)
     *
     * @param query Specifies the attributes and spatialfilter of the query. If no parameters are specified, then all features satisfying the layer'sconfiguration/filters are returned.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryFeatures(query?: Query | QueryProperties, options?: FeatureLayerQueryFeaturesOptions): IPromise<FeatureSet>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryObjectIds)
     *
     * @param query Specifies the attributes and spatialfilter of the query. If no parameters are specified, then the Object IDs of all featuressatisfying the layer's configuration/filters are returned.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryObjectIds(query?: Query | QueryProperties, options?: FeatureLayerQueryObjectIdsOptions): IPromise<number[]>;
    /**
     * Executes a [RelationshipQuery](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html) against the feature service andreturns [FeatureSets](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html) grouped by source layer or table objectIds.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryRelatedFeatures)
     *
     * @param relationshipQuery Specifies relationship parametersfor querying related features or records from a layer or a table.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryRelatedFeatures(
      relationshipQuery: RelationshipQuery | RelationshipQueryProperties,
      options?: FeatureLayerQueryRelatedFeaturesOptions
    ): IPromise<any>;
    /**
     * Updates an existing attachment for a feature. This operation is available only if the layer's[capabilities.data.supportsAttachment](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#updateAttachment)
     *
     * @param feature The feature containing the attachment to be updated.
     * @param attachmentId Id of the attachment to be updated.
     * @param attachment HTML form that contains a file upload field pointing to the file to be added as an attachment.
     *
     */
    updateAttachment(
      feature: Graphic,
      attachmentId: number,
      attachment: HTMLFormElement | FormData
    ): IPromise<FeatureEditResult>;

    on(name: "layerview-create", eventHandler: FeatureLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: FeatureLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: FeatureLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface FeatureLayerConstructor {
    new (properties?: FeatureLayerProperties): FeatureLayer;

    fromJSON(json: any): FeatureLayer;
  }

  export const FeatureLayer: FeatureLayerConstructor;

  interface FeatureLayerProperties
    extends LayerProperties,
      PortalLayerProperties,
      ScaleRangeLayerProperties,
      RefreshableLayerProperties,
      TemporalLayerProperties {
    /**
     * Copyright information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#copyright)
     */
    copyright?: string;
    /**
     * The SQL where clause used to filter features on the client. Only the features that satisfy the definitionexpression are displayed in the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html). Setting a definition expression is usefulwhen the dataset is large and you don't want to bring all features to the client for analysis.Definition expressions may be set when a layer is constructed prior to it loading in the view orafter it has been added to the map. If the definition expression is set after the layer has been added to the map, the view willautomatically refresh itself to display the features that satisfy the new definition expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#definitionExpression)
     */
    definitionExpression?: string;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#displayField)
     */
    displayField?: string;
    /**
     * An object that allows you to create a dynamic layer with dataeither from map service sublayers or data from a registered workspace.See [DynamicMapLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicMapLayer)for creating dynamic layers from map service layers for on the flyrendering, labeling, and filtering (definition expressions). To createdynamic layers from other sources in registered workspaces such as tables and table joins,see [DynamicDataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicDataLayer).If you already have a [Sublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html) instance, youcan call the [createFeatureLayer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#createFeatureLayer)method on the Sublayer to construct the layer for you.This only applies to map services with[dynamic layers](https://enterprise.arcgis.com/en/server/latest/publish-services/linux/about-dynamic-layers.htm) enabled.Therefore, the [url](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#url) of the FeatureLayer instance must point to a map service urlending with `/dynamicLayer`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#dynamicDataSource)
     */
    dynamicDataSource?: DynamicMapLayer | DynamicDataLayer;
    /**
     * Specifies how features are placed on the vertical axis (z). This property may only be usedin a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). See the [ElevationInfo sample](https://developers.arcgis.com/javascript/latest/sample-code/scene-elevationinfo/index.html)for an example of how this property may be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#elevationInfo)
     */
    elevationInfo?: FeatureLayerElevationInfo;
    /**
     * Configures the method for decluttering overlapping features in the view. If this property is not set (or set to `null`),every feature is drawn individually.Currently this property is only supported in 3D [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) for point features with non-draped[Icons](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html) or [Text](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html)symbol layers.![declutter](https://developers.arcgis.com/javascript/assets/img/samples/city-points-declutter.gif)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#featureReduction)
     */
    featureReduction?: FeatureLayerFeatureReduction;
    /**
     * An array of fields in the layer. Each field represents an attributethat may contain a value for each feature in the layer. For example,a field named `POP_2015`, stores information about total population as anumeric value for each feature; this value represents the total numberof people living within the geographic bounds of the feature.This property must be set in the constructor when creating a FeatureLayerfrom client-side [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html). To create FeatureLayers fromclient-side features you must also set the [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#source),[objectIdField](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#objectIdField), [spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#spatialReference),[geometryType](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#geometryType), [renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#renderer), and [type](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#type) properties.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#fields)
     */
    fields?: FieldProperties[];
    /**
     * The geometry type of features in the layer. All features must be of the same type.This property is read-only when the layer is created from a [url](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#url).When creating a FeatureLayer from client-side features, this property isinferred by the geometryType of the features provided in the layer's [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#source)property.**Possible Values:** point | multipoint | polyline | polygon | multipatch | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#geometryType)
     */
    geometryType?: string;
    /**
     * The historic moment to query. If historicMoment is not specified, the querywill apply to the current features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#historicMoment)
     */
    historicMoment?: DateProperties;
    /**
     * Returns `true` if the layer is loaded from a non-spatial table in a service. Non-spatial table does not havea spatial column that represents geographic features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#isTable)
     *
     * @default false
     */
    isTable?: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#labelingInfo)
     */
    labelingInfo?: LabelClassProperties[];
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#labelsVisible)
     *
     * @default true
     */
    labelsVisible?: boolean;
    /**
     * The layer ID, or layer index, of a Feature Service layer. This is particularly useful whenloading a single FeatureLayer with the [portalItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#portalItem) property from a service containingmultiple layers. You can specify this value in one of two scenarios:* When loading the layer via the [portalItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#portalItem) property.* When pointing the layer [url](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#url) directly to the Feature Service.If a layerId is not specified in either of the above scenarios, then the first layerin the service (`layerId = 0`) is selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#layerId)
     */
    layerId?: number;
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled?: boolean;
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#fields) containinga unique value or identifier for each feature in the layer.This is required when constructing a FeatureLayer from a collectionof client-side [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#objectIdField)
     */
    objectIdField?: string;
    /**
     * 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/api-reference/esri-layers-FeatureLayer.html#renderer),[labeling](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#labelingInfo) and setting the [elevation info](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#elevationInfo) for the layer.The required fields and `outFields` are used to populate[FeatureLayerView.availableFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#availableFields).Set this property to include the fields that will be used for client-side[queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryFeatures)if the fields are not part of required fields used for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#outFields)
     *
     * @default null
     */
    outFields?: string[];
    /**
     * 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/api-reference/esri-layers-FeatureLayer.html#popupTemplate) to define whatinformation should be displayed in the popup. Alternatively, a default popup template may be automatically used if[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#popupEnabled)
     *
     * @default true
     */
    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](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#popup) when a feature is selectedusing text and/or charts. See the [PopupTemplate sample](https://developers.arcgis.com/javascript/latest/sample-code/intro-popuptemplate/index.html)for an example of how [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) interacts with a[FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html).A default popup template is automatically used if no `popupTemplate` has been defined when[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled)is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * The renderer assigned to the layer. The renderer defines how tovisualize each feature in the layer. Depending on the renderer type,features may be visualized with the same symbol, or with varying symbolsbased on the values of provided attribute fields or functions.However, when creating a FeatureLayer from client-side features, this property mustbe specified in the layer's constructor along with the[source](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#source),[fields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#fields), [objectIdField](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#objectIdField) properties.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#renderer)
     */
    renderer?: RendererProperties;
    /**
     * When `true`, indicates that M values will be returned. When`false`, indicates that M values will never be returned. The layer viewdetermines whether to include M values in feature queries when theproperty value is `undefined`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#returnM)
     *
     * @default undefined
     */
    returnM?: boolean;
    /**
     * When `true`, indicates that Z values will always be returned. When`false`, indicates that Z values will never be returned. The layer viewdetermines whether to include Z values in feature queries when theproperty value is `undefined`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#returnZ)
     *
     * @default undefined
     */
    returnZ?: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#screenSizePerspectiveEnabled)
     *
     * @default true
     */
    screenSizePerspectiveEnabled?: boolean;
    /**
     * A collection of [Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) objects used to create a FeatureLayer.The geometry of each feature all must have a matching [geometryType](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#geometryType).This property should only be used when creating a FeatureLayer from client-side features.When creating a FeatureLayer from client-side features, the [fields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#fields),[objectIdField](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#objectIdField), [renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#renderer), and [type](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#type) properties must also be set.Use [applyEdits()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits) method to add, remove, and update featuresfrom a layer at runtime. Once `applyEdits()` resolves successfully, use [queryFeatures()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryFeatures)to return updated features.The [spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#spatialReference) and [geometryType](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#geometryType) propertiesare determined based on the features provided to this property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#source)
     */
    source?: CollectionProperties<GraphicProperties>;
    /**
     * The spatial reference of the layer. When creating the layer from a[url](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#url), the spatial reference is read from the service.When creating a FeatureLayer from client-side features, this property isinferred from the geometries of the features provided in the [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#source)property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * An array of feature templates defined in the feature layer.See [ArcGIS Pro subtypes document](https://pro.arcgis.com/en/pro-app/help/data/geodatabases/overview/an-overview-of-subtypes.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#templates)
     */
    templates?: FeatureTemplateProperties[];
    /**
     * An array of subtypes defined in the feature service exposed by ArcGIS REST API.Each item includes information about the type, such as the type ID, name, and definition expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#types)
     */
    types?: FeatureTypeProperties[];
    /**
     * The URL of the REST endpoint of the layer, non-spatial table or service. The URL may either point to aresource on ArcGIS Enterprise or ArcGIS Online.If the url points directly to a service, then the layer must be specified in the[layerId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#layerId) property. If no [layerId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#layerId) is given, then the first layer in the service will be loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#url)
     */
    url?: string;
  }

  /**
   * The fields that record who addsor edits data in the feature service and when the edit is made.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#EditFieldsInfo)
   */
  export interface EditFieldsInfo extends Object {
    /**
     * The name of the field that stores the name of the user who created the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#EditFieldsInfo)
     */
    creatorField: string;
    /**
     * The name of the field that stores the date and time the feature was created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#EditFieldsInfo)
     */
    creationDateField: string;
    /**
     * The name of the field that stores the name of the user who last edited the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#EditFieldsInfo)
     */
    editorField: string;
    /**
     * The name of the field that stores the date and time the feature was last edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#EditFieldsInfo)
     */
    editDateField: string;
  }

  /**
   * Specifies information about editing.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#EditingInfo)
   */
  export interface EditingInfo extends Object {
    /**
     * Indicates the last time the layer was edited. This value gets updated every time the layer's data is edited or when any of its properties change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#EditingInfo)
     */
    lastEditDate: Date;
  }

  /**
   * FeatureEditResult represents the result of adding, updating or deleting a feature.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#FeatureEditResult)
   */
  export interface FeatureEditResult extends Object {
    /**
     * Object Id of the feature that was edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#FeatureEditResult)
     */
    objectId: number;
    /**
     * If the edit failed, the edit result includes an error.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#FeatureEditResult)
     */
    error: FeatureEditResultError;
  }

  export interface FeatureLayerApplyEditsEdits extends Object {
    /**
     * Array of features to be added.Values of non nullable fields must be provided when adding new features. Date fields must have[numeric](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime) valuesrepresenting universal time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits)
     */
    addFeatures?: Graphic[];
    /**
     * Array of features to be updated. Each feature must have valid[objectId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#objectIdField). Values of non nullable fields must be provided when updating features. Date fields must have[numeric](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime) valuesrepresenting universal time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits)
     */
    updateFeatures?: Graphic[];
    /**
     * An array of features orobjects to be deleted. When an array of features is passed, each feature must have a valid[objectId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#objectIdField). When an array of objects is used, each object must have a valid`objectId` property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits)
     */
    deleteFeatures?: Graphic[] | any[];
  }

  export interface FeatureLayerCapabilities extends Object {
    /**
     * Describes characteristics of the data in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    data: FeatureLayerCapabilitiesData;
    /**
     * Describes editing capabilities that can be performed on the features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    editing: FeatureLayerCapabilitiesEditing;
    /**
     * Describes the metadata contained on features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    metadata: FeatureLayerCapabilitiesMetadata;
    /**
     * Describes operations that can be performed on features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    operations: FeatureLayerCapabilitiesOperations;
    /**
     * Describes [query](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html)operations that can be performed on features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    query: FeatureLayerCapabilitiesQuery;
    /**
     * Indicates if the layer's query operation supports querying features or records related to features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    queryRelated: FeatureLayerCapabilitiesQueryRelated;
  }

  export interface FeatureLayerCapabilitiesData extends Object {
    /**
     * Indicates if the attachment is enabled on the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsAttachment: boolean;
    /**
     * Indicates if the features in the layer support M values. Requires ArcGIS Server service 10.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsM: boolean;
    /**
     * Indicates if the features in the layer support Z values. Requires ArcGIS Server service 10.1 or greater.See [elevationInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#elevationInfo) for details regarding placement andrendering of features with z-values in 3D [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsZ: boolean;
  }

  export interface FeatureLayerCapabilitiesEditing extends Object {
    /**
     * Indicates if anonymous users can delete features created by others.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsDeleteByAnonymous: boolean;
    /**
     * Indicates if logged in users can delete features created by others.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsDeleteByOthers: boolean;
    /**
     * Indicates if the geometry of the features in the layer can be edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsGeometryUpdate: boolean;
    /**
     * Indicates if the `globalid` values provided by the client are used in [applyEdits](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsGlobalId: boolean;
    /**
     * Indicates if the `rollbackOnFailure` parameter can be set to `true` or `false` when running the synchronizeReplica operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsRollbackOnFailure: boolean;
    /**
     * Indicates if anonymous users can update features created by others.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsUpdateByAnonymous: boolean;
    /**
     * Indicates if logged in users can update features created by others.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsUpdateByOthers: boolean;
    /**
     * Indicates if `m-values` must be provided when updating features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsUpdateWithoutM: boolean;
    /**
     * Indicates if the layer supports uploading attachments by [UploadId](https://developers.arcgis.com/rest/services-reference/item.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsUploadWithItemId: boolean;
  }

  export interface FeatureLayerCapabilitiesMetadata extends Object {
    /**
     * Indicates whether to provide a user-defined field description.See [Describe attribute fields](https://doc.arcgis.com/en/arcgis-online/manage-data/describe-fields.htm) for additional information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsAdvancedFieldProperties: boolean;
  }

  export interface FeatureLayerCapabilitiesOperations extends Object {
    /**
     * Indicates if new features can be [added](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits) to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsAdd: boolean;
    /**
     * Indicates if features can be [deleted](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits) from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsDelete: boolean;
    /**
     * Indicates if features in the layer can be [updated](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsUpdate: boolean;
    /**
     * Indicates if features in the layer can be [edited](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits). Use `supportsAdd`, `supportsUpdate` and `supportsDelete` to determine which editing operations are supported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsEditing: boolean;
    /**
     * Indicates if values of one or more field values in the layercan be updated. See the [Calculate REST operation](https://developers.arcgis.com/rest/services-reference/calculate-feature-service-layer-.htm)document for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsCalculate: boolean;
    /**
     * Indicates if features in the layer can be [queried](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryFeatures).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsQuery: boolean;
    /**
     * Indicates if the layer supports[REST API queryAttachments](https://developers.arcgis.com/rest/services-reference/query-attachments-feature-service-layer-.htm)operation, which is supported with hosted feature services at version 10.5 and greater.If `false`, [queryAttachments() method](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryAttachments) can only return attachments for one feature at a time.If `true`, `queryAttachments()` can return attachments for array of [objectIds](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#objectIds).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsQueryAttachments: boolean;
    /**
     * Indicates if the layer supports a SQL-92 expression or where clause. This operation isonly supported in ArcGIS Online hosted feature services.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsValidateSql: boolean;
    /**
     * Indicates if resized attachments are supported in the feature layer.This is useful for showing thumbnails in [Popups](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsResizeAttachments: boolean;
  }

  export interface FeatureLayerCapabilitiesQuery extends Object {
    /**
     * Indicates if the geometry centroid associated with each polygon feature can be returned. This operation isonly supported in ArcGIS Online hosted feature services.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsCentroid: boolean;
    /**
     * Indicates if the layer's query operation supports a buffer distance for input geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsDistance: boolean;
    /**
     * Indicates if the layer supports queries for distinct values based on fields specified in the [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#outFields).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsDistinct: boolean;
    /**
     * Indicates if the query operation supports `disjoint` [spatial relationship](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#spatialRelationship). This is valid only for[hosted feature services](http://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsDisjointSpatialRelationship: boolean;
    /**
     * Indicates if the layer's query response includes the extent of features.At 10.3, this option is only available for hosted feature services. At 10.3.1, it is available for hosted and non-hosted feature services.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsExtent: boolean;
    /**
     * Indicates if the layer's query response contains geometry attributes, including shape area and length attributes.This operation is supported in ArcGIS Online hosted feature services created since December 2016 and ArcGIS Enterprise feature services since version 10.7.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsGeometryProperties: boolean;
    /**
     * Indicates if the layer supports the [having](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#having) clause on the service. Requires an ArcGIS Server service 10.6.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsHavingClause: boolean;
    /**
     * Indicates if features returned in the query response can be ordered by one or more fields. Requires an ArcGIS Server service 10.3 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsOrderBy: boolean;
    /**
     * Indicates if the query response supports pagination. Requires an ArcGIS Server service 10.3 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsPagination: boolean;
    /**
     * Indicates if the query response includes the [query geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#queryGeometry). This is valid only for[hosted feature services](http://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsQueryGeometry: boolean;
    /**
     * Indicates if the query operation supports the projection of geometries onto a virtual grid. Requires an ArcGIS Server service 10.6.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsQuantization: boolean;
    /**
     * Indicates if the query operation supports quantization designed to be used in edit mode (highest resolution at the given spatial reference). Requires an ArcGIS Server service 10.6.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsQuantizationEditMode: boolean;
    /**
     * Indicates if the number of features returned by the query operation can be controlled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsResultType: boolean;
    /**
     * Indicates if the query operation supports SQL expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsSqlExpression: boolean;
    /**
     * Indicates if the query operation supports using standardized queries.Learn more about [standardized queries here](http://server.arcgis.com/en/server/latest/administer/linux/about-standardized-queries.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsStandardizedQueriesOnly: boolean;
    /**
     * Indicates if the layer supports field-based statistical functions. Requires ArcGIS Server service 10.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsStatistics: boolean;
    /**
     * Indicates if the layer supports historic moment query. Requires ArcGIS Server service 10.5 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsHistoricMoment: boolean;
  }

  export interface FeatureLayerCapabilitiesQueryRelated extends Object {
    /**
     * Indicates if the layer's query response includes the number of features or records related to features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsCount: boolean;
    /**
     * Indicates if the related features or records returned in the query response can be ordered by one or more fields.Requires ArcGIS Server service 10.3 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsOrderBy: boolean;
    /**
     * Indicates if the query response supports pagination for related features or records. Requires ArcGIS Server service 10.3 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsPagination: boolean;
  }

  export interface FeatureLayerCreatePopupTemplateOptions extends Object {
    /**
     * The maximum number of fields to include in the  popup template.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#createPopupTemplate)
     *
     * @default 75
     */
    maximumFields?: number;
    /**
     * Field types to ignore when creating the popup.  By default the `geometry`, `blob`, `raster`, `guid` and `xml` field types are ignored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#createPopupTemplate)
     */
    ignoreFieldTypes?: string[];
  }

  export interface FeatureLayerElevationInfo extends Object {
    /**
     * Defines how the feature is placed with respect to the terrain surface. If the geometry consists of multiplepoints (e.g. lines or polygons), the elevation is evaluated separately for each point. See the table below for a list of possible values.Mode | Description------|------------on-the-ground | Features are draped on the terrain surface. This is the default value for features with [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) or [Polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) geometries and features with [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometries rendered with [ObjectSymbol3DLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html).relative-to-ground | Features are placed at an elevation relative to the terrain surface. The feature's elevation is determined by summing up the terrain elevation and the geometry's z-value (if present). If `featureExpressionInfo` is defined, the result of the expression is used instead of the geometry’s z-value. `relative-to-ground` is the default value for [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometries rendered with [IconSymbol3DLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html).absolute-height | Features are placed at an absolute elevation (z-value) above sea level. This z-value is determined by the geometry's z-value (if present). If `featureExpressionInfo` is defined, the result of the expression is used instead of the geometry’s z-value. This mode doesn't take the elevation of the terrain into account. This is the default value of features with any geometry type where [hasZ](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#hasZ) is `true`.relative-to-scene | Features are aligned to buildings and other objects part of 3D Object [SceneLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html) or [IntegratedMeshLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html), depending on which has higher elevation. If the feature is not directly above a building or any other feature, it is aligned to the terrain surface elevation. If defined, the result of `featureExpressionInfo` is added to the 3D Object/terrain surface elevation. In this mode z-values are ignored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#elevationInfo)
     */
    mode: string;
    /**
     * An elevation offset, which is added to the vertical position of the feature. If `unit` is not defined, the offsetis in `meters`.When `mode = "on-the-ground"`, this property has no effect.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#elevationInfo)
     */
    offset?: number;
    /**
     * This object contains information about setting a custom z-value on the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#elevationInfo)
     */
    featureExpressionInfo?: FeatureLayerElevationInfoFeatureExpressionInfo;
    /**
     * The unit for `featureExpressionInfo` and `offset` values. It doesn't apply to z-values.**Possible Values:** feet | meters | kilometers | miles | us-feet | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#elevationInfo)
     */
    unit?: string;
  }

  export interface FeatureLayerElevationInfoFeatureExpressionInfo extends Object {
    /**
     * An [Arcade expression](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) evaluating to a number that determinesthe z-value of the feature. If the geometry has z-values, they will be ignored and `featureExpressionInfo` will be used to calculate the verticalposition of the feature. When `mode = "on-the-ground"`, this property has no effect. For line and polygon geometries the result of the expressionis the same for all vertices of a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#elevationInfo)
     */
    expression?: string;
  }

  export interface FeatureLayerFeatureReduction extends Object {
    /**
     * Type of the decluttering method. The only supported type at the moment is`"selection"`. In this method, some of the overlapping features are hidden such that none of the remaining featuresintersect on screen. Label deconfliction also respects this option and hides labels that would overlap with the features of this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#featureReduction)
     */
    type: string;
  }

  export interface FeatureLayerGetFieldDomainOptions extends Object {
    /**
     * The feature to which the [Domain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Domain.html) is assigned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#getFieldDomain)
     */
    feature: Graphic;
  }

  export interface FeatureLayerQueryAttachmentsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryAttachments)
     */
    signal?: AbortSignal;
  }

  export interface FeatureLayerQueryExtentOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryExtent)
     */
    signal?: AbortSignal;
  }

  export interface FeatureLayerQueryFeatureCountOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryFeatureCount)
     */
    signal?: AbortSignal;
  }

  export interface FeatureLayerQueryFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryFeatures)
     */
    signal?: AbortSignal;
  }

  export interface FeatureLayerQueryObjectIdsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryObjectIds)
     */
    signal?: AbortSignal;
  }

  export interface FeatureLayerQueryRelatedFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryRelatedFeatures)
     */
    signal?: AbortSignal;
  }

  export interface FeatureLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface FeatureLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface FeatureLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  export interface FeatureEditResultError extends Object {
    /**
     * Error name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#FeatureEditResult)
     */
    name: string;
    /**
     * Message describing the error.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#FeatureEditResult)
     */
    message: string;
  }

  interface GeoJSONLayer extends Layer, ScaleRangeLayer, TemporalLayer {
    /**
     * Describes the layer's supported capabilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    readonly capabilities: GeoJSONLayerCapabilities;
    /**
     * Copyright information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#copyright)
     */
    copyright: string;
    /**
     * The SQL where clause used to filter features on the client. Only the features that satisfy the definitionexpression are displayed in the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html).Definition expressions may be set when a layer is constructed prior to it loading in the view orafter it has been added to the map. If the definition expression is set after the layer has been added to the map, the view willautomatically refresh itself to display the features that satisfy the new definition expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#definitionExpression)
     */
    definitionExpression: string;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#displayField)
     */
    displayField: string;
    /**
     * Specifies how graphics are placed on the vertical axis (z). This property may only be usedin a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). See the [ElevationInfo sample](https://developers.arcgis.com/javascript/latest/sample-code/scene-elevationinfo/index.html)for an example of how this property may be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#elevationInfo)
     */
    elevationInfo: GeoJSONLayerElevationInfo;
    /**
     * Configures the method for decluttering overlapping features in the view. If this property is not set (or set to `null`),every feature is drawn individually.Currently this property is only supported in 3D [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) for point features with non-draped[Icons](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html) or [Text](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html)symbol layers.![declutter](https://developers.arcgis.com/javascript/assets/img/samples/city-points-declutter.gif)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#featureReduction)
     */
    featureReduction: GeoJSONLayerFeatureReduction;
    /**
     * An array of fields in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#fields)
     */
    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/api-reference/esri-layers-support-FieldsIndex.html#dateFields) in a layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#fieldsIndex)
     */
    readonly fieldsIndex: FieldsIndex;
    /**
     * The geometry type of features in the layer. All features must be of the same type.**Possible Values:** point | multipoint | polyline | polygon
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#geometryType)
     */
    geometryType: string;
    /**
     * Indicates whether the client-side features in the layer have `Z` (elevation) values.Refer to [elevationInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#elevationInfo) for details regarding placement and renderingof features with z-values in 3D [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).Use the `supportsZ` property in the layer's [capabilities.data](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)object to verify if `Z` values are supported on the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#hasZ)
     *
     * @default undefined
     */
    readonly hasZ: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#labelingInfo)
     */
    labelingInfo: LabelClass[];
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#labelsVisible)
     *
     * @default true
     */
    labelsVisible: boolean;
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled: boolean;
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#fields) containinga unique value or identifier for each feature in the layer.`id` property of the feature object in the GeoJSON will be used as ObjectID.If `id` property is not present and `objectIDField` is not specified, `ObjectID` field will be generated for each feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#objectIdField)
     */
    objectIdField: string;
    /**
     * 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/api-reference/esri-layers-GeoJSONLayer.html#popupTemplate) to define whatinformation should be displayed in the popup. Alternatively, a default popup template may be automatically used if[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#popupEnabled)
     *
     * @default true
     */
    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](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#popup) when a feature is selectedusing text and/or charts. See the [PopupTemplate sample](https://developers.arcgis.com/javascript/latest/sample-code/intro-popuptemplate/index.html)for an example of how [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) interacts with a[FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html).A default popup template is automatically used if no `popupTemplate` has been defined when[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled)is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * The renderer assigned to the layer. The renderer defines how tovisualize each feature in the layer. Depending on the renderer type,features may be visualized with the same symbol, or with varying symbolsbased on the values of provided attribute fields or functions. If not specified,a default renderer will be generated based on the geometry type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#renderer)
     */
    renderer: Renderer;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#screenSizePerspectiveEnabled)
     *
     * @default true
     */
    screenSizePerspectiveEnabled: boolean;
    /**
     * The spatial reference of the layer. The default value is WGS84.This property can be set explicitly to project the longitude and latitudecoordinates when the layer parses the GeoJSON file. While not required, explicitly settingthe spatial reference of the layer will improve the performancewhen projecting to a spatial reference other than the one used by thecoordinates in the raw data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#spatialReference)
     *
     * @default SpatialReference.WGS84
     */
    spatialReference: SpatialReference;
    /**
     * An array of feature templates defined in the layer.See [ArcGIS Pro subtypes document](https://pro.arcgis.com/en/pro-app/help/data/geodatabases/overview/an-overview-of-subtypes.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#templates)
     */
    templates: FeatureTemplate[];
    /**
     * The URL of the GeoJSON file.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#url)
     */
    url: string;

    /**
     * Applies edits to features in a layer. New features can be created and existingfeatures can be updated or deleted on the cilent side. Feature geometries and/or attributes may be modified.If client-side features are added, removed or updated at runtime using [applyEdits()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#applyEdits)then use [queryFeatures()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#queryFeatures) to return updated features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#applyEdits)
     *
     * @param edits Object containing features to be added, updated or deleted.
     * @param edits.addFeatures Array of features to be added.Values of non nullable fields must be provided when adding new features. Date fields must have[numeric](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime) valuesrepresenting universal time.
     * @param edits.updateFeatures Array of features to be updated. Each feature must have valid[objectId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#objectIdField). Values of non nullable fields must be provided when updating features. Date fields must have[numeric](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime) valuesrepresenting universal time.
     * @param edits.deleteFeatures An array of features orobjects to be deleted. When an array of features is passed, each feature must have a valid[objectId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#objectIdField). When an array of objects is used, each object must have a valid`objectId` property.
     *
     */
    applyEdits(edits: GeoJSONLayerApplyEditsEdits): IPromise<any>;
    /**
     * Creates a popup template for the layer, populated with all the fields of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#createPopupTemplate)
     *
     * @param options Options for creating the popup template.
     * @param options.maximumFields The maximum number of fields to include in the  popup template.
     * @param options.ignoreFieldTypes Field types to ignore when creating the popup.  By default the `geometry`, `blob`, `raster`, `guid` and `xml` field types are ignored.
     *
     */
    createPopupTemplate(options?: GeoJSONLayerCreatePopupTemplateOptions): PopupTemplate;
    /**
     * Creates query parameter object that can be used to fetch features thatsatisfy the layer's configurations such as [definitionExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#definitionExpression).It will return `Z` and `M` values based on the layer's [data capabilities](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities).It sets the query parameter's [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outFields) property to `["*"]`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#createQuery)
     *
     *
     */
    createQuery(): Query;
    /**
     * Returns the [Field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html) instance for a field name (case-insensitive).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#getField)
     *
     * @param fieldName Name of the field.
     *
     */
    getField(fieldName: string): Field;
    /**
     * Returns the Domain associated with the given field name. The domain can be either a CodedValueDomain or RangeDomain.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#getFieldDomain)
     *
     * @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.
     * @param options.feature The feature to which the [Domain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Domain.html) is assigned.
     *
     */
    getFieldDomain(fieldName: string, options?: GeoJSONLayerGetFieldDomainOptions): Domain;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#queryExtent)
     *
     * @param query Specifies the attributes and spatialfilter of the query. If no parameters are specified, then the extent and count of all featuressatisfying the layer's configuration/filters are returned.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryExtent(query?: Query | QueryProperties, options?: GeoJSONLayerQueryExtentOptions): IPromise<any>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#queryFeatureCount)
     *
     * @param query Specifies the attributes andspatial filter of the query. If no parameters are specified, the total number of featuressatisfying the layer's configuration/filters is returned.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryFeatureCount(
      query?: Query | QueryProperties,
      options?: GeoJSONLayerQueryFeatureCountOptions
    ): IPromise<number>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#queryFeatures)
     *
     * @param query Specifies the attributes and spatialfilter of the query. If no parameters are specified, then all features satisfying the layer'sconfiguration/filters are returned.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryFeatures(query?: Query | QueryProperties, options?: GeoJSONLayerQueryFeaturesOptions): IPromise<FeatureSet>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#queryObjectIds)
     *
     * @param query Specifies the attributes and spatialfilter of the query. If no parameters are specified, then the Object IDs of all featuressatisfying the layer's configuration/filters are returned.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryObjectIds(query?: Query | QueryProperties, options?: GeoJSONLayerQueryObjectIdsOptions): IPromise<number[]>;

    on(name: "layerview-create", eventHandler: GeoJSONLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: GeoJSONLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: GeoJSONLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface GeoJSONLayerConstructor {
    new (properties?: GeoJSONLayerProperties): GeoJSONLayer;
  }

  export const GeoJSONLayer: GeoJSONLayerConstructor;

  interface GeoJSONLayerProperties extends LayerProperties, ScaleRangeLayerProperties, TemporalLayerProperties {
    /**
     * Copyright information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#copyright)
     */
    copyright?: string;
    /**
     * The SQL where clause used to filter features on the client. Only the features that satisfy the definitionexpression are displayed in the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html).Definition expressions may be set when a layer is constructed prior to it loading in the view orafter it has been added to the map. If the definition expression is set after the layer has been added to the map, the view willautomatically refresh itself to display the features that satisfy the new definition expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#definitionExpression)
     */
    definitionExpression?: string;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#displayField)
     */
    displayField?: string;
    /**
     * Specifies how graphics are placed on the vertical axis (z). This property may only be usedin a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). See the [ElevationInfo sample](https://developers.arcgis.com/javascript/latest/sample-code/scene-elevationinfo/index.html)for an example of how this property may be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#elevationInfo)
     */
    elevationInfo?: GeoJSONLayerElevationInfo;
    /**
     * Configures the method for decluttering overlapping features in the view. If this property is not set (or set to `null`),every feature is drawn individually.Currently this property is only supported in 3D [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) for point features with non-draped[Icons](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html) or [Text](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html)symbol layers.![declutter](https://developers.arcgis.com/javascript/assets/img/samples/city-points-declutter.gif)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#featureReduction)
     */
    featureReduction?: GeoJSONLayerFeatureReduction;
    /**
     * An array of fields in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#fields)
     */
    fields?: FieldProperties[];
    /**
     * The geometry type of features in the layer. All features must be of the same type.**Possible Values:** point | multipoint | polyline | polygon
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#geometryType)
     */
    geometryType?: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#labelingInfo)
     */
    labelingInfo?: LabelClassProperties[];
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#labelsVisible)
     *
     * @default true
     */
    labelsVisible?: boolean;
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled?: boolean;
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#fields) containinga unique value or identifier for each feature in the layer.`id` property of the feature object in the GeoJSON will be used as ObjectID.If `id` property is not present and `objectIDField` is not specified, `ObjectID` field will be generated for each feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#objectIdField)
     */
    objectIdField?: string;
    /**
     * 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/api-reference/esri-layers-GeoJSONLayer.html#popupTemplate) to define whatinformation should be displayed in the popup. Alternatively, a default popup template may be automatically used if[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#popupEnabled)
     *
     * @default true
     */
    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](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#popup) when a feature is selectedusing text and/or charts. See the [PopupTemplate sample](https://developers.arcgis.com/javascript/latest/sample-code/intro-popuptemplate/index.html)for an example of how [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) interacts with a[FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html).A default popup template is automatically used if no `popupTemplate` has been defined when[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled)is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * The renderer assigned to the layer. The renderer defines how tovisualize each feature in the layer. Depending on the renderer type,features may be visualized with the same symbol, or with varying symbolsbased on the values of provided attribute fields or functions. If not specified,a default renderer will be generated based on the geometry type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#renderer)
     */
    renderer?: RendererProperties;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#screenSizePerspectiveEnabled)
     *
     * @default true
     */
    screenSizePerspectiveEnabled?: boolean;
    /**
     * The spatial reference of the layer. The default value is WGS84.This property can be set explicitly to project the longitude and latitudecoordinates when the layer parses the GeoJSON file. While not required, explicitly settingthe spatial reference of the layer will improve the performancewhen projecting to a spatial reference other than the one used by thecoordinates in the raw data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#spatialReference)
     *
     * @default SpatialReference.WGS84
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * An array of feature templates defined in the layer.See [ArcGIS Pro subtypes document](https://pro.arcgis.com/en/pro-app/help/data/geodatabases/overview/an-overview-of-subtypes.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#templates)
     */
    templates?: FeatureTemplateProperties[];
    /**
     * The URL of the GeoJSON file.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#url)
     */
    url?: string;
  }

  export interface GeoJSONLayerApplyEditsEdits extends Object {
    /**
     * Array of features to be added.Values of non nullable fields must be provided when adding new features. Date fields must have[numeric](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime) valuesrepresenting universal time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#applyEdits)
     */
    addFeatures?: Graphic[];
    /**
     * Array of features to be updated. Each feature must have valid[objectId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#objectIdField). Values of non nullable fields must be provided when updating features. Date fields must have[numeric](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime) valuesrepresenting universal time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#applyEdits)
     */
    updateFeatures?: Graphic[];
    /**
     * An array of features orobjects to be deleted. When an array of features is passed, each feature must have a valid[objectId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#objectIdField). When an array of objects is used, each object must have a valid`objectId` property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#applyEdits)
     */
    deleteFeatures?: Graphic[] | any[];
  }

  export interface GeoJSONLayerCapabilities extends Object {
    /**
     * Describes characteristics of the data in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    data: GeoJSONLayerCapabilitiesData;
    /**
     * Describes editing capabilities that can be performed on the features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    editing: GeoJSONLayerCapabilitiesEditing;
    /**
     * Describes operations that can be performed on features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    operations: GeoJSONLayerCapabilitiesOperations;
    /**
     * Describes [query](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html)operations that can be performed on features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    query: GeoJSONLayerCapabilitiesQuery;
    /**
     * Indicates if the layer's query operation supports querying features or records related to features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    queryRelated: GeoJSONLayerCapabilitiesQueryRelated;
  }

  export interface GeoJSONLayerCapabilitiesData extends Object {
    /**
     * Indicates if the attachment is enabled on the layer. At this current time, the GeoJSONLayer doesn’t support attachments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsAttachment: boolean;
    /**
     * Indicates if the features in the layer support M values. Requires ArcGIS Server service 10.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsM: boolean;
    /**
     * Indicates if the features in the layer support Z values. Requires ArcGIS Server service 10.1 or greater.See [elevationInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#elevationInfo) for details regarding placement andrendering of features with z-values in 3D [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsZ: boolean;
  }

  export interface GeoJSONLayerCapabilitiesEditing extends Object {
    /**
     * Indicates if anonymous users can delete features created by others.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsDeleteByAnonymous: boolean;
    /**
     * Indicates if logged in users can delete features created by others.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsDeleteByOthers: boolean;
    /**
     * Indicates if the geometry of the features in the layer can be edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsGeometryUpdate: boolean;
    /**
     * Indicates if the `globalid` values provided by the client are used in [applyEdits](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#applyEdits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsGlobalId: boolean;
    /**
     * Indicates if the `rollbackOnFailure` parameter can be set to `true` or `false` when running the synchronizeReplica operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsRollbackOnFailure: boolean;
    /**
     * Indicates if anonymous users can update features created by others.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsUpdateByAnonymous: boolean;
    /**
     * Indicates if logged in users can update features created by others.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsUpdateByOthers: boolean;
    /**
     * Indicates if `m-values` must be provided when updating features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsUpdateWithoutM: boolean;
    /**
     * Indicates if the layer supports uploading attachments by [UploadId](https://developers.arcgis.com/rest/services-reference/item.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsUploadWithItemId: boolean;
  }

  export interface GeoJSONLayerCapabilitiesOperations extends Object {
    /**
     * Indicates if new features can be [added](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#applyEdits) to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsAdd: boolean;
    /**
     * Indicates if features can be [deleted](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#applyEdits) from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsDelete: boolean;
    /**
     * Indicates if features in the layer can be [updated](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#applyEdits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsUpdate: boolean;
    /**
     * Indicates if features in the layer can be [edited](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#applyEdits). Use `supportsAdd`, `supportsUpdate` and `supportsDelete` to determine which editing operations are supported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsEditing: boolean;
    /**
     * Indicates if values of one or more field values in the layercan be updated. See the [Calculate REST operation](https://developers.arcgis.com/rest/services-reference/calculate-feature-service-layer-.htm)document for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsCalculate: boolean;
    /**
     * Indicates if features in the layer can be [queried](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#queryFeatures).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsQuery: boolean;
    /**
     * Indicates if the layer supports[REST API queryAttachments](https://developers.arcgis.com/rest/services-reference/query-attachments-feature-service-layer-.htm)operation, which is supported with hosted feature services at version 10.5 and greater.If `false`, [queryAttachments() method](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#queryAttachments) can only return attachments for one feature at a time.If `true`, `queryAttachments()` can return attachments for array of [objectIds](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#objectIds).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsQueryAttachments: boolean;
    /**
     * Indicates if the layer supports a SQL-92 expression or where clause. This operation isonly supported in ArcGIS Online hosted feature services.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsValidateSql: boolean;
    /**
     * Indicates if resized attachments are supported in the layer.This is useful for showing thumbnails in [Popups](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsResizeAttachments: boolean;
  }

  export interface GeoJSONLayerCapabilitiesQuery extends Object {
    /**
     * Indicates if the geometry centroid associated with each polygon feature can be returned. This operation isonly supported in ArcGIS Online hosted feature services.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsCentroid: boolean;
    /**
     * Indicates if the layer's query operation supports a buffer distance for input geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsDistance: boolean;
    /**
     * Indicates if the layer supports queries for distinct values based on fields specified in the [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#outFields).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsDistinct: boolean;
    /**
     * Indicates if the query operation supports `disjoint` [spatial relationship](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#spatialRelationship). This is valid only for[hosted feature services](http://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsDisjointSpatialRelationship: boolean;
    /**
     * Indicates if the layer's query response includes the extent of features.At 10.3, this option is only available for hosted feature services. At 10.3.1, it is available for hosted and non-hosted feature services.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsExtent: boolean;
    /**
     * Indicates if the layer's query response contains geometry attributes, including shape area and length attributes.This operation is only supported in ArcGIS Online hosted feature services.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsGeometryProperties: boolean;
    /**
     * Indicates if the layer supports the [having](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#having) clause on the service. Requires an ArcGIS Server service 10.6.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsHavingClause: boolean;
    /**
     * Indicates if features returned in the query response can be ordered by one or more fields. Requires an ArcGIS Server service 10.3 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsOrderBy: boolean;
    /**
     * Indicates if the query response supports pagination. Requires an ArcGIS Server service 10.3 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsPagination: boolean;
    /**
     * Indicates if the query response includes the [query geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#queryGeometry). This is valid only for[hosted feature services](http://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsQueryGeometry: boolean;
    /**
     * Indicates if the query operation supports the projection of geometries onto a virtual grid. Requires an ArcGIS Server service 10.6.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsQuantization: boolean;
    /**
     * Indicates if the query operation supports quantization designed to be used in edit mode (highest resolution at the given spatial reference). Requires an ArcGIS Server service 10.6.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsQuantizationEditMode: boolean;
    /**
     * Indicates if the number of features returned by the query operation can be controlled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsResultType: boolean;
    /**
     * Indicates if the query operation supports SQL expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsSqlExpression: boolean;
    /**
     * Indicates if the query operation supports using standardized queries.Learn more about [standardized queries here](http://server.arcgis.com/en/server/latest/administer/linux/about-standardized-queries.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsStandardizedQueriesOnly: boolean;
    /**
     * Indicates if the layer supports field-based statistical functions. Requires ArcGIS Server service 10.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsStatistics: boolean;
    /**
     * Indicates if the layer supports historic moment query. Requires ArcGIS Server service 10.5 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsHistoricMoment: boolean;
  }

  export interface GeoJSONLayerCapabilitiesQueryRelated extends Object {
    /**
     * Indicates if the layer's query response includes the number of features or records related to features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsCount: boolean;
    /**
     * Indicates if the related features or records returned in the query response can be ordered by one or more fields.Requires ArcGIS Server service 10.3 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsOrderBy: boolean;
    /**
     * Indicates if the query response supports pagination for related features or records. Requires ArcGIS Server service 10.3 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsPagination: boolean;
  }

  export interface GeoJSONLayerCreatePopupTemplateOptions extends Object {
    /**
     * The maximum number of fields to include in the  popup template.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#createPopupTemplate)
     *
     * @default 75
     */
    maximumFields?: number;
    /**
     * Field types to ignore when creating the popup.  By default the `geometry`, `blob`, `raster`, `guid` and `xml` field types are ignored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#createPopupTemplate)
     */
    ignoreFieldTypes?: string[];
  }

  export interface GeoJSONLayerElevationInfo extends Object {
    /**
     * Defines how the graphic is placed with respect to the terrain surface.See the table below for a list of possible values.Mode | Description------|------------on-the-ground | Graphics are draped on the terrain surface. This is the default value for [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometries rendered with [ObjectSymbol3DLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html).relative-to-ground | Graphics are placed at an elevation relative to the terrain surface. The graphic's elevation is determined by summing up the terrain elevation and the result of `featureExpressionInfo` (if defined). This is the default value for [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometries rendered with [IconSymbol3DLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html).absolute-height | Graphics are placed at an absolute elevation (z-value) above sea level. This z-value is determined by the result of `featureExpressionInfo` (if defined). This mode doesn't take the elevation of the terrain into account.relative-to-scene | Graphics are aligned to buildings and other objects part of 3D Object [SceneLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html) or [IntegratedMeshLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html), depending on which has higher elevation. If the graphic is not directly above a building or any other feature, it is aligned to the terrain surface elevation. If defined, the result of `featureExpressionInfo` is added to the 3D Object/terrain surface elevation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#elevationInfo)
     */
    mode: string;
    /**
     * An elevation offset, which is added to the vertical position of the graphic. If `unit` is not defined,the offset is in `meters`.When `mode = "on-the-ground"`, this property has no effect.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#elevationInfo)
     */
    offset?: number;
    /**
     * This object contains information about setting a custom z-value on the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#elevationInfo)
     */
    featureExpressionInfo?: GeoJSONLayerElevationInfoFeatureExpressionInfo;
    /**
     * The unit for `featureExpressionInfo` and `offset` values.**Possible Values:** feet | meters | kilometers | miles | us-feet | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#elevationInfo)
     */
    unit?: string;
  }

  export interface GeoJSONLayerElevationInfoFeatureExpressionInfo extends Object {
    /**
     * An [Arcade expression](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) evaluating to a number that determines the z-value of the feature. When `mode = "on-the-ground"`, this property has no effect. For line and polygon geometries the result of the expression is the same for all vertices of a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#elevationInfo)
     */
    expression?: string;
  }

  export interface GeoJSONLayerFeatureReduction extends Object {
    /**
     * Type of the decluttering method. The only supported type at the moment is`selection`. In this method, some of the overlapping features are hidden such that none of the remaining featuresintersect on screen. Label deconfliction also respects this option and hides labels that would overlap with the features of this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#featureReduction)
     */
    type: string;
  }

  export interface GeoJSONLayerGetFieldDomainOptions extends Object {
    /**
     * The feature to which the [Domain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Domain.html) is assigned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#getFieldDomain)
     */
    feature: Graphic;
  }

  export interface GeoJSONLayerQueryExtentOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#queryExtent)
     */
    signal?: AbortSignal;
  }

  export interface GeoJSONLayerQueryFeatureCountOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#queryFeatureCount)
     */
    signal?: AbortSignal;
  }

  export interface GeoJSONLayerQueryFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#queryFeatures)
     */
    signal?: AbortSignal;
  }

  export interface GeoJSONLayerQueryObjectIdsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#queryObjectIds)
     */
    signal?: AbortSignal;
  }

  export interface GeoJSONLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface GeoJSONLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface GeoJSONLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface GeoRSSLayer extends Layer, ScaleRangeLayer {
    /**
     * Symbol used to represent line features from the GeoRSS feed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoRSSLayer.html#lineSymbol)
     */
    lineSymbol: SimpleLineSymbol;
    /**
     * Symbol used to represent point features from the GeoRSS feed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoRSSLayer.html#pointSymbol)
     */
    pointSymbol: PictureMarkerSymbol;
    /**
     * Symbol used to represent polygon features from the GeoRSS feed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoRSSLayer.html#polygonSymbol)
     */
    polygonSymbol: SimpleFillSymbol;
    /**
     * The URL pointing to a GeoRSS file. This must be publicly available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoRSSLayer.html#url)
     */
    url: string;

    on(name: "layerview-create", eventHandler: GeoRSSLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: GeoRSSLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: GeoRSSLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface GeoRSSLayerConstructor {
    new (properties?: GeoRSSLayerProperties): GeoRSSLayer;
  }

  export const GeoRSSLayer: GeoRSSLayerConstructor;

  interface GeoRSSLayerProperties extends LayerProperties, ScaleRangeLayerProperties {
    /**
     * Symbol used to represent line features from the GeoRSS feed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoRSSLayer.html#lineSymbol)
     */
    lineSymbol?: SimpleLineSymbolProperties;
    /**
     * Symbol used to represent point features from the GeoRSS feed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoRSSLayer.html#pointSymbol)
     */
    pointSymbol?: PictureMarkerSymbolProperties;
    /**
     * Symbol used to represent polygon features from the GeoRSS feed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoRSSLayer.html#polygonSymbol)
     */
    polygonSymbol?: SimpleFillSymbolProperties;
    /**
     * The URL pointing to a GeoRSS file. This must be publicly available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoRSSLayer.html#url)
     */
    url?: string;
  }

  export interface GeoRSSLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface GeoRSSLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface GeoRSSLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface GraphicsLayer extends Layer, ScaleRangeLayer {
    /**
     * Specifies how graphics are placed on the vertical axis (z). This property may only be usedin a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). See the [ElevationInfo sample](https://developers.arcgis.com/javascript/latest/sample-code/scene-elevationinfo/index.html)for an example of how this property may be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#elevationInfo)
     */
    elevationInfo: GraphicsLayerElevationInfo;
    /**
     * A collection of [graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) in the layer.Each graphic is a vector representation of the location of areal-world feature. Each graphic in a single GraphicsLayer may contain either a[Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html), [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html), or[Polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#geometry). In addition, each[Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) in the collectionmay contain its own [attributes](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#attributes),[Symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol.html), and [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).To add a graphic to the GraphicsLayer use [add()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#add), or[GraphicsLayer.graphics.add()](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html#add).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#graphics)
     */
    graphics: Collection<Graphic>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#screenSizePerspectiveEnabled)
     *
     * @default true
     */
    screenSizePerspectiveEnabled: boolean;
    /**
     * For [GraphicsLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html) the type is `graphics`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#type)
     */
    readonly type: "graphics";

    /**
     * Adds a graphic to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#add)
     *
     * @param graphic The graphic to add to the layer.
     *
     */
    add(graphic: Graphic): void;
    /**
     * Adds an array of graphics to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#addMany)
     *
     * @param graphics The graphic(s) to add to the layer.
     *
     */
    addMany(graphics: Graphic[]): void;
    /**
     * Removes a graphic from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#remove)
     *
     * @param graphic The graphic to remove from the layer.
     *
     */
    remove(graphic: Graphic): void;
    /**
     * Clears all the graphics from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#removeAll)
     *
     *
     */
    removeAll(): void;
    /**
     * Removes an array of graphics from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#removeMany)
     *
     * @param graphics The graphics to remove from the layer.
     *
     */
    removeMany(graphics: Graphic[]): void;

    on(name: "layerview-create", eventHandler: GraphicsLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: GraphicsLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: GraphicsLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface GraphicsLayerConstructor {
    new (properties?: GraphicsLayerProperties): GraphicsLayer;
  }

  export const GraphicsLayer: GraphicsLayerConstructor;

  interface GraphicsLayerProperties extends LayerProperties, ScaleRangeLayerProperties {
    /**
     * Specifies how graphics are placed on the vertical axis (z). This property may only be usedin a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). See the [ElevationInfo sample](https://developers.arcgis.com/javascript/latest/sample-code/scene-elevationinfo/index.html)for an example of how this property may be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#elevationInfo)
     */
    elevationInfo?: GraphicsLayerElevationInfo;
    /**
     * A collection of [graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) in the layer.Each graphic is a vector representation of the location of areal-world feature. Each graphic in a single GraphicsLayer may contain either a[Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html), [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html), or[Polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#geometry). In addition, each[Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) in the collectionmay contain its own [attributes](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#attributes),[Symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol.html), and [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).To add a graphic to the GraphicsLayer use [add()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#add), or[GraphicsLayer.graphics.add()](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html#add).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#graphics)
     */
    graphics?: CollectionProperties<GraphicProperties>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#screenSizePerspectiveEnabled)
     *
     * @default true
     */
    screenSizePerspectiveEnabled?: boolean;
  }

  export interface GraphicsLayerElevationInfo extends Object {
    /**
     * Defines how the graphic is placed with respect to the terrain surface. If the geometry consists of multiple points(e.g. lines or polygons), the elevation is evaluated separately for each point.See the table below for a list of possible values.Mode | Description------|------------on-the-ground | Graphics are placed on the terrain surface.relative-to-ground | Graphics are placed at an elevation relative to the terrain surface. The graphic's elevation is determined by summing the terrain elevation and the geometry's z-value (if present). In case `featureExpressionInfo` is defined, the result of the expression is used instead of the geometry’s z-value.absolute-height | Graphics are placed at an absolute elevation (z-value) above sea level. This z-value is determined by the geometry's z-value (if present). If `featureExpressionInfo` is defined, the result of the expression is used instead of the geometry’s z-value. It doesn't take the elevation of the terrain into account.relative-to-scene | Graphics are aligned to buildings and other objects part of 3D Object [SceneLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html) or [IntegratedMeshLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html), depending on which has higher elevation. If the graphic is not directly above a building or any other feature, it is aligned to the terrain surface elevation. If defined, the result of `featureExpressionInfo` is added to the 3D Object/terrain surface elevation. In this mode z-values are ignored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#elevationInfo)
     */
    mode: string;
    /**
     * An elevation offset, which is added to the vertical position of the graphic. If `unit` is not defined, the offset isin `meters`.When `mode = "on-the-ground"`, this property has no effect.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#elevationInfo)
     */
    offset?: number;
    /**
     * This object contains information about setting a custom z-value on the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#elevationInfo)
     */
    featureExpressionInfo?: GraphicsLayerElevationInfoFeatureExpressionInfo;
    /**
     * The unit for `featureExpressionInfo` and `offset` values. It doesn't apply to z-values.**Possible Values:** feet | meters | kilometers | miles | us-feet | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#elevationInfo)
     */
    unit?: string;
  }

  export interface GraphicsLayerElevationInfoFeatureExpressionInfo extends Object {
    /**
     * An [Arcade expression](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) evaluating to a number that determinesthe z-value of the feature. If the geometry has z-values, they will be ignored and only `featureExpressionInfo` is used to calculate the verticalposition of the graphic. When `mode = "on-the-ground"`, this property has no effect. For line and polygon geometries the result of the expressionis the same for all vertices of a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#elevationInfo)
     */
    expression?: string;
  }

  export interface GraphicsLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface GraphicsLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface GraphicsLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface GroupLayer extends Layer, LayersMixin, PortalLayer {
    /**
     * Indicates how to manage the visibility of the children layers. Possible valuesare described in the table below.Value | Description------|------------independent | Each child layer manages its visibility independent from other layers.inherited | Each child layer's visibility matches the [GroupLayer’s visibility](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html#visible).exclusive | Only one child layer is visible at a time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html#visibilityMode)
     */
    visibilityMode: string;

    /**
     * Loads all the externally loadable resources associated with the group layer.For the group layer this will load all the layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html#loadAll)
     *
     *
     */
    loadAll(): IPromise<GroupLayer>;

    on(name: "layerview-create", eventHandler: GroupLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: GroupLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: GroupLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface GroupLayerConstructor {
    new (properties?: GroupLayerProperties): GroupLayer;

    fromJSON(json: any): GroupLayer;
  }

  export const GroupLayer: GroupLayerConstructor;

  interface GroupLayerProperties extends LayerProperties, LayersMixinProperties, PortalLayerProperties {
    /**
     * Indicates how to manage the visibility of the children layers. Possible valuesare described in the table below.Value | Description------|------------independent | Each child layer manages its visibility independent from other layers.inherited | Each child layer's visibility matches the [GroupLayer’s visibility](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html#visible).exclusive | Only one child layer is visible at a time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html#visibilityMode)
     */
    visibilityMode?: string;
  }

  export interface GroupLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface GroupLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface GroupLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface ImageryLayer
    extends Layer,
      ArcGISImageService,
      PortalLayer,
      RefreshableLayer,
      ScaleRangeLayer,
      TemporalLayer {
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled: boolean;
    /**
     * Indicates whether to display popups when features in the layer are clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#popupEnabled)
     *
     * @default true
     */
    popupEnabled: boolean;
    /**
     * The popup template for the layer. When set on the layer, the popupTemplateallows users to access attributes and display their values using text and/or chartsin the [view's popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#popup) when a pixel is clicked.See [this sample](https://developers.arcgis.com/javascript/latest/sample-code/layers-imagery-popup/index.html)for an example of how [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) interacts with an[ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html).A default popup template is automatically used if no `popupTemplate` has been defined when[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled)is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;

    /**
     * Creates a default popup template for the layer, populated with all the fields of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#createPopupTemplate)
     *
     * @param options the options.
     * @param options.maximumFields the maximum number of fields to include in the  popup template.
     * @param options.ignoreFieldTypes field types to ignore when creating the popup.  By default the `geometry`, `blob`, `raster`, `guid` and `xml` field types are ignored.
     *
     */
    createPopupTemplate(options?: ImageryLayerCreatePopupTemplateOptions): PopupTemplate;
    /**
     * Executes the [pixelFilter](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#pixelFilter) function and redraws the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#redraw)
     *
     *
     */
    redraw(): void;

    on(name: "layerview-create", eventHandler: ImageryLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: ImageryLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: ImageryLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface ImageryLayerConstructor {
    new (properties?: ImageryLayerProperties): ImageryLayer;

    fromJSON(json: any): ImageryLayer;
  }

  export const ImageryLayer: ImageryLayerConstructor;

  interface ImageryLayerProperties
    extends LayerProperties,
      ArcGISImageServiceProperties,
      PortalLayerProperties,
      RefreshableLayerProperties,
      ScaleRangeLayerProperties,
      TemporalLayerProperties {
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled?: boolean;
    /**
     * Indicates whether to display popups when features in the layer are clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#popupEnabled)
     *
     * @default true
     */
    popupEnabled?: boolean;
    /**
     * The popup template for the layer. When set on the layer, the popupTemplateallows users to access attributes and display their values using text and/or chartsin the [view's popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#popup) when a pixel is clicked.See [this sample](https://developers.arcgis.com/javascript/latest/sample-code/layers-imagery-popup/index.html)for an example of how [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) interacts with an[ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html).A default popup template is automatically used if no `popupTemplate` has been defined when[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled)is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
  }

  export interface ImageryLayerCreatePopupTemplateOptions extends Object {
    /**
     * the maximum number of fields to include in the  popup template.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#createPopupTemplate)
     *
     * @default 75
     */
    maximumFields?: number;
    /**
     * field types to ignore when creating the popup.  By default the `geometry`, `blob`, `raster`, `guid` and `xml` field types are ignored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#createPopupTemplate)
     */
    ignoreFieldTypes?: string[];
  }

  export interface ImageryLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface ImageryLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface ImageryLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface IntegratedMeshLayer extends Layer, SceneService, PortalLayer, ScaleRangeLayer {
    /**
     * Specifies how the mesh is placed on the vertical axis (z). This propertyonly affects [IntegratedMeshLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html) when using the `absolute-height` mode.Integrated mesh layers always render in front of the ground surface, so setting negative offset values will not render thembelow the ground.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html#elevationInfo)
     */
    elevationInfo: IntegratedMeshLayerElevationInfo;

    on(name: "layerview-create", eventHandler: IntegratedMeshLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: IntegratedMeshLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: IntegratedMeshLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface IntegratedMeshLayerConstructor {
    new (properties?: IntegratedMeshLayerProperties): IntegratedMeshLayer;

    fromJSON(json: any): IntegratedMeshLayer;
  }

  export const IntegratedMeshLayer: IntegratedMeshLayerConstructor;

  interface IntegratedMeshLayerProperties
    extends LayerProperties,
      SceneServiceProperties,
      PortalLayerProperties,
      ScaleRangeLayerProperties {
    /**
     * Specifies how the mesh is placed on the vertical axis (z). This propertyonly affects [IntegratedMeshLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html) when using the `absolute-height` mode.Integrated mesh layers always render in front of the ground surface, so setting negative offset values will not render thembelow the ground.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html#elevationInfo)
     */
    elevationInfo?: IntegratedMeshLayerElevationInfo;
  }

  export interface IntegratedMeshLayerElevationInfo extends Object {
    /**
     * Defines how the mesh is placed on the vertical axis (z).Currently only `absolute-height` is supported.Mode | Description------|------------absolute-height | The mesh is placed at an absolute elevation (z-value) above sea level. This z-value is determined by summing up the `offset` value and the mesh's z-value. It doesn't take the elevation of the terrain into account. This is the only supported elevation mode for an IntegratedMeshLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html#elevationInfo)
     */
    mode: string;
    /**
     * An elevation offset, which is added to the vertical position of the mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html#elevationInfo)
     *
     * @default 0
     */
    offset?: number;
    /**
     * The unit for `offset` values.**Possible Values:** feet | meters | kilometers | miles | us-feet | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html#elevationInfo)
     *
     * @default meters
     */
    unit?: string;
  }

  export interface IntegratedMeshLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface IntegratedMeshLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface IntegratedMeshLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface KMLLayer extends Layer, PortalLayer, ScaleRangeLayer {
    /**
     * A collection of [KMLSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html)s.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-KMLLayer.html#sublayers)
     */
    sublayers: Collection<KMLSublayer>;
    /**
     * The publicly accessible URL for a .kml or .kmz file.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-KMLLayer.html#url)
     */
    url: string;

    on(name: "layerview-create", eventHandler: KMLLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: KMLLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: KMLLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface KMLLayerConstructor {
    new (properties?: KMLLayerProperties): KMLLayer;

    fromJSON(json: any): KMLLayer;
  }

  export const KMLLayer: KMLLayerConstructor;

  interface KMLLayerProperties extends LayerProperties, PortalLayerProperties, ScaleRangeLayerProperties {
    /**
     * A collection of [KMLSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html)s.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-KMLLayer.html#sublayers)
     */
    sublayers?: CollectionProperties<KMLSublayerProperties>;
    /**
     * The publicly accessible URL for a .kml or .kmz file.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-KMLLayer.html#url)
     */
    url?: string;
  }

  export interface KMLLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface KMLLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface KMLLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface Layer extends Accessor, Loadable, Evented {
    /**
     * The full extent of the layer. By default, this is worldwide. This property may be usedto set the extent of the view to match a layer's extent so that its featuresappear to fill the view. See the sample snippet below.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#fullExtent)
     */
    fullExtent: Extent;
    /**
     * The unique ID assigned to the layer. If not set by the developer, it is automaticallygenerated when the layer is loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#id)
     */
    id: string;
    /**
     * Indicates how the layer should display in the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget.The possible values are listed below.Value | Description------|------------ show | The layer is visible in the table of contents. hide | The layer is hidden in the table of contents. hide-children | If the layer is a [GroupLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html), [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html), [KMLLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-KMLLayer.html), [MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html), [TileLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html) or [WMSLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html), hide the children layers from the table of contents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#listMode)
     *
     * @default show
     */
    listMode: "show" | "hide" | "hide-children";
    /**
     * Indicates whether the layer's resources have loaded. When `true`,all the properties of the object can be accessed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#loaded)
     *
     * @default false
     */
    readonly loaded: boolean;
    /**
     * The opacity of the layer. This value can range between `1` and `0`, where `0` is 100 percenttransparent and `1` is completely opaque.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#opacity)
     *
     * @default 1
     */
    opacity: number;
    /**
     * The title of the layer used to identify it in places such as the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html)and [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widgets.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#title)
     */
    title: string;
    /**
     * The layer type provides a convenient way to check the type of the layerwithout the need to import specific layer modules.**Possible values:** base-dynamic | base-elevation | base-tile | bing-maps | elevation | feature  | graphics | group | imagery |  integrated-mesh | map-image | open-street-map | point-cloud | scene |  stream | tile | unknown | unsupported | vector-tile | web-tile
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#type)
     */
    readonly type: string;
    /**
     * Indicates if the layer is visible in the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html). When `false`,the layer may still be added to a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html)instance that is referenced in a view, but its features will not be visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#visible)
     *
     * @default true
     */
    visible: boolean;

    /**
     * Called by the views, such as [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) and[SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html), when the layer is added to the[Map.layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#layers) collection and a layer view mustbe created for it. **This method is used internally and there is no use case for invoking it directly**.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#createLayerView)
     *
     * @param view The parent view.
     * @param options An object specifying additional options. See the                           object specification table below for the required properties of this object.
     * @param options.signal A signal to abort the creation of the layerview.
     *
     */
    createLayerView(view: any, options?: LayerCreateLayerViewOptions): void;
    /**
     * Fetches custom attribution data for the layer when it becomes available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#fetchAttributionData)
     *
     *
     */
    fetchAttributionData(): IPromise<any>;
  }

  interface LayerConstructor {
    new (properties?: LayerProperties): Layer;

    /**
     * Creates a new layer instance from an ArcGIS Server URL. Dependingon the URL, the returned layer type may be a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html), [TileLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html),[MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html), [SceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html), [StreamLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html),[ElevationLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html) or [GroupLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html).This is useful when you work with various ArcGIS Server URLs, butyou don't necessarily know which layer type(s) they create. Thismethod creates the appropriate layer type for you. In case of a feature serviceor a scene service, when the URL points to the service and the service has multiple layers,the returned promise will resolve to a [GroupLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#fromArcGISServerUrl)
     *
     * @param params Input parameters for creating the layer.
     * @param params.url The ArcGIS Server URL used to create the layer.
     * @param params.properties Set any of the layer's properties herefor constructing the layer instance (e.g. popupTemplate, renderer, etc.).
     *
     */
    fromArcGISServerUrl(params: LayerFromArcGISServerUrlParams): IPromise<Layer>;
    /**
     * Creates a new layer instance of the appropriate layer class from anArcGIS Online or ArcGIS Enterprise[portal item](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html). If the item points toa feature service with multiple layers, then a [GroupLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html)is created. If the item points to a service with a single layer, then it resolvesto a layer of the same type of class as the service.See also: [isLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#isLayer)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#fromPortalItem)
     *
     * @param params The parameters for loading the portal item.
     * @param params.portalItem The object representing an ArcGISOnline or ArcGIS Enterprise portal item from which to load the layer.
     *
     */
    fromPortalItem(params: LayerFromPortalItemParams): IPromise<Layer>;
  }

  export const Layer: LayerConstructor;

  interface LayerProperties extends LoadableProperties {
    /**
     * The full extent of the layer. By default, this is worldwide. This property may be usedto set the extent of the view to match a layer's extent so that its featuresappear to fill the view. See the sample snippet below.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#fullExtent)
     */
    fullExtent?: ExtentProperties;
    /**
     * The unique ID assigned to the layer. If not set by the developer, it is automaticallygenerated when the layer is loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#id)
     */
    id?: string;
    /**
     * Indicates how the layer should display in the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget.The possible values are listed below.Value | Description------|------------ show | The layer is visible in the table of contents. hide | The layer is hidden in the table of contents. hide-children | If the layer is a [GroupLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html), [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html), [KMLLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-KMLLayer.html), [MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html), [TileLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html) or [WMSLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html), hide the children layers from the table of contents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#listMode)
     *
     * @default show
     */
    listMode?: "show" | "hide" | "hide-children";
    /**
     * The opacity of the layer. This value can range between `1` and `0`, where `0` is 100 percenttransparent and `1` is completely opaque.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#opacity)
     *
     * @default 1
     */
    opacity?: number;
    /**
     * The title of the layer used to identify it in places such as the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html)and [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widgets.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#title)
     */
    title?: string;
    /**
     * Indicates if the layer is visible in the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html). When `false`,the layer may still be added to a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html)instance that is referenced in a view, but its features will not be visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#visible)
     *
     * @default true
     */
    visible?: boolean;
  }

  export interface LayerCreateLayerViewOptions extends Object {
    /**
     * A signal to abort the creation of the layerview.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#createLayerView)
     */
    signal?: AbortSignal;
  }

  export interface LayerFromArcGISServerUrlParams extends Object {
    /**
     * The ArcGIS Server URL used to create the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#fromArcGISServerUrl)
     */
    url: string;
    /**
     * Set any of the layer's properties herefor constructing the layer instance (e.g. popupTemplate, renderer, etc.).
     *
     * [Read more...](properties.html)
     */
    properties?: any;
  }

  export interface LayerFromPortalItemParams extends Object {
    /**
     * The object representing an ArcGISOnline or ArcGIS Enterprise portal item from which to load the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#fromPortalItem)
     */
    portalItem: PortalItem;
  }

  interface MapImageLayer
    extends Layer,
      SublayersOwner,
      ArcGISMapService,
      ScaleRangeLayer,
      RefreshableLayer,
      TemporalLayer {
    /**
     * A flat [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of all the [sublayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#sublayers)in the MapImageLayer including the sublayers of its sublayers.All sublayers are referenced in the order in which they are drawn in the view (bottom to top).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#allSublayers)
     */
    readonly allSublayers: Collection<Sublayer>;
    /**
     * The output dots per inch (DPI) of the MapImageLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#dpi)
     *
     * @default 96
     */
    dpi: number;
    /**
     * The version of the geodatabase of the map service data. Readthe [Overview of versioning](https://desktop.arcgis.com/en/arcmap/latest/manage-data/geodatabases/an-overview-of-versioning.htm) topic for more detailsabout this capability.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#gdbVersion)
     */
    gdbVersion: string;
    /**
     * The output image type.**Possible Values:** png | png8 | png24 | png32 | jpg | pdf | bmp | gif | svg | pngjpg
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#imageFormat)
     *
     * @default png24
     */
    imageFormat: string;
    /**
     * Indicates the maximum height of the image exported by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#imageMaxHeight)
     *
     * @default 2048
     */
    imageMaxHeight: number;
    /**
     * Indicates the maximum width of the image exported by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#imageMaxWidth)
     *
     * @default 2048
     */
    imageMaxWidth: number;
    /**
     * Indicates whether the background of the image exported by the service is transparent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#imageTransparency)
     *
     * @default true
     */
    imageTransparency: boolean;
    /**
     * The portal item from which the layer is loaded. This will load the layeralong with any overridden properties (e.g. renderers, definition expressions, etc.) savedto the portal item, not the map service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#portalItem)
     */
    portalItem: PortalItem;
    /**
     * A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of [Sublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html) objectsthat allow you to alterthe properties of one or more sublayers of the MapImageLayer. If this propertyis not specified, all the sublayers from the service are displayed as defined in theservice. If an empty array is passed to this property then none of the sublayersfrom the service are displayed in the layer.All sublayers are referenced in the order in which they are drawn in the view (bottom to top).They may be [added](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html#add),[removed](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html#remove), or[reordered](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html#reorder) using the[Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) methods. Because [Sublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html) extends[Accessor](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Accessor.html), its properties may be[watched](https://developers.arcgis.com/javascript/latest/guide/working-with-props/index.html#watchProperties).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#sublayers)
     */
    sublayers: Collection<Sublayer>;
    /**
     * The URL to the REST endpoint of the map service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#url)
     */
    url: string;

    /**
     * Gets the parameters of the exported image to use when calling the[export REST operation](https://developers.arcgis.com/rest/services-reference/export-map.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#createExportImageParameters)
     *
     * @param extent The extent of the exported image
     * @param width The width of the exported image
     * @param height The height of the exported image
     * @param options The parameter options is an object with the following properties.
     * @param options.rotation The rotation in degrees of the exported image. Available since ArcGIS Server 10.3.
     * @param options.pixelRatio The pixel ratio to apply to the dpi of the exported image.
     * @param options.timeExtent The time instant or time extent of content to render.
     *
     */
    createExportImageParameters(
      extent: Extent,
      width: number,
      height: number,
      options?: MapImageLayerCreateExportImageParametersOptions
    ): any;
    /**
     * This method fetches the image for the specified extent and size.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#fetchImage)
     *
     * @param extent The extent of the view.
     * @param width The width of the view in pixels.
     * @param height The height of the view in pixels.
     * @param options The parameter options is an object with the following properties.
     * @param options.rotation The rotation in degrees of the exported image. Available since ArcGIS Server 10.3.
     * @param options.pixelRatio The ratio of the resolution in physical pixels of the image to the resolution it will be displayed at.
     * @param options.timeExtent The time instant or time extent of content to render.
     * @param options.signal An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     */
    fetchImage(
      extent: Extent,
      width: number,
      height: number,
      options?: MapImageLayerFetchImageOptions
    ): IPromise<HTMLImageElement>;
    /**
     * This method returns a URL to an image for a given extent, width and height.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#getImageUrl)
     *
     * @param extent The extent of the exported image.
     * @param width The width of the view in pixels.
     * @param height The height of the view in pixels.
     * @param options The parameter options is an object with the following properties.
     * @param options.pixelRatio The ratio of the resolution in physical pixels of the image to the resolution it will be displayed at.
     * @param options.rotation The rotation in degrees of the exported image. Available since ArcGIS Server 10.3.
     *
     */
    getImageUrl(
      extent: Extent,
      width: number,
      height: number,
      options?: MapImageLayerGetImageUrlOptions
    ): IPromise<string> | string;

    on(name: "layerview-create", eventHandler: MapImageLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: MapImageLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: MapImageLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface MapImageLayerConstructor {
    new (properties?: MapImageLayerProperties): MapImageLayer;

    fromJSON(json: any): MapImageLayer;
  }

  export const MapImageLayer: MapImageLayerConstructor;

  interface MapImageLayerProperties
    extends LayerProperties,
      ArcGISMapServiceProperties,
      ScaleRangeLayerProperties,
      RefreshableLayerProperties,
      TemporalLayerProperties {
    /**
     * The output dots per inch (DPI) of the MapImageLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#dpi)
     *
     * @default 96
     */
    dpi?: number;
    /**
     * The version of the geodatabase of the map service data. Readthe [Overview of versioning](https://desktop.arcgis.com/en/arcmap/latest/manage-data/geodatabases/an-overview-of-versioning.htm) topic for more detailsabout this capability.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#gdbVersion)
     */
    gdbVersion?: string;
    /**
     * The output image type.**Possible Values:** png | png8 | png24 | png32 | jpg | pdf | bmp | gif | svg | pngjpg
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#imageFormat)
     *
     * @default png24
     */
    imageFormat?: string;
    /**
     * Indicates the maximum height of the image exported by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#imageMaxHeight)
     *
     * @default 2048
     */
    imageMaxHeight?: number;
    /**
     * Indicates the maximum width of the image exported by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#imageMaxWidth)
     *
     * @default 2048
     */
    imageMaxWidth?: number;
    /**
     * Indicates whether the background of the image exported by the service is transparent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#imageTransparency)
     *
     * @default true
     */
    imageTransparency?: boolean;
    /**
     * The portal item from which the layer is loaded. This will load the layeralong with any overridden properties (e.g. renderers, definition expressions, etc.) savedto the portal item, not the map service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#portalItem)
     */
    portalItem?: PortalItemProperties;
    /**
     * A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of [Sublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html) objectsthat allow you to alterthe properties of one or more sublayers of the MapImageLayer. If this propertyis not specified, all the sublayers from the service are displayed as defined in theservice. If an empty array is passed to this property then none of the sublayersfrom the service are displayed in the layer.All sublayers are referenced in the order in which they are drawn in the view (bottom to top).They may be [added](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html#add),[removed](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html#remove), or[reordered](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html#reorder) using the[Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) methods. Because [Sublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html) extends[Accessor](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Accessor.html), its properties may be[watched](https://developers.arcgis.com/javascript/latest/guide/working-with-props/index.html#watchProperties).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#sublayers)
     */
    sublayers?: CollectionProperties<SublayerProperties>;
    /**
     * The URL to the REST endpoint of the map service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#url)
     */
    url?: string;
  }

  export interface MapImageLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface MapImageLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface MapImageLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  export interface MapImageLayerCreateExportImageParametersOptions extends Object {
    /**
     * The rotation in degrees of the exported image. Available since ArcGIS Server 10.3.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#createExportImageParameters)
     */
    rotation?: number;
    /**
     * The pixel ratio to apply to the dpi of the exported image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#createExportImageParameters)
     */
    pixelRatio?: number;
    /**
     * The time instant or time extent of content to render.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#createExportImageParameters)
     */
    timeExtent?: any;
  }

  export interface MapImageLayerFetchImageOptions extends Object {
    /**
     * The rotation in degrees of the exported image. Available since ArcGIS Server 10.3.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#fetchImage)
     */
    rotation?: number;
    /**
     * The ratio of the resolution in physical pixels of the image to the resolution it will be displayed at.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#fetchImage)
     */
    pixelRatio?: number;
    /**
     * The time instant or time extent of content to render.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#fetchImage)
     */
    timeExtent?: any;
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#fetchImage)
     */
    signal?: AbortSignal;
  }

  export interface MapImageLayerGetImageUrlOptions extends Object {
    /**
     * The ratio of the resolution in physical pixels of the image to the resolution it will be displayed at.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#getImageUrl)
     */
    pixelRatio?: number;
    /**
     * The rotation in degrees of the exported image. Available since ArcGIS Server 10.3.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#getImageUrl)
     */
    rotation?: number;
  }

  interface MapNotesLayer extends Layer, PortalLayer, ScaleRangeLayer {
    on(name: "layerview-create", eventHandler: MapNotesLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: MapNotesLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: MapNotesLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface MapNotesLayerConstructor {
    new (properties?: MapNotesLayerProperties): MapNotesLayer;

    fromJSON(json: any): MapNotesLayer;
  }

  export const MapNotesLayer: MapNotesLayerConstructor;

  interface MapNotesLayerProperties extends LayerProperties, PortalLayerProperties, ScaleRangeLayerProperties {}

  export interface MapNotesLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface MapNotesLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface MapNotesLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface ArcGISCachedService {
    /**
     * The copyright text as defined by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISCachedService.html#copyright)
     */
    copyright: string;
    /**
     * The spatial reference of the layer as defined by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISCachedService.html#spatialReference)
     */
    readonly spatialReference: SpatialReference;
    /**
     * Contains information about the tiling scheme for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISCachedService.html#tileInfo)
     */
    tileInfo: TileInfo;
  }

  interface ArcGISCachedServiceConstructor {
    new (properties?: ArcGISCachedServiceProperties): ArcGISCachedService;

    fromJSON(json: any): ArcGISCachedService;
  }

  export const ArcGISCachedService: ArcGISCachedServiceConstructor;

  interface ArcGISCachedServiceProperties {
    /**
     * The copyright text as defined by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISCachedService.html#copyright)
     */
    copyright?: string;
    /**
     * Contains information about the tiling scheme for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISCachedService.html#tileInfo)
     */
    tileInfo?: TileInfoProperties;
  }

  interface ArcGISImageService {
    /**
     * The compression quality value. Controls how much loss the image will be subjected to by the compression algorithm.Valid value ranges of compression quality are from 0 to 100. Only valid when using `jpg` or `jpgpng` [image format](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#format).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#compressionQuality)
     */
    compressionQuality: number;
    /**
     * Controls the tolerance of the lerc compression algorithm.The tolerance defines the maximum possible error of pixel values in the compressed image. It's a double value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#compressionTolerance)
     *
     * @default 0.01
     */
    compressionTolerance: number;
    /**
     * The copyright text as defined by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#copyright)
     */
    copyright: string;
    /**
     * The SQL where clause used to filter rasters on the client. Only the rasters that satisfy the definitionexpression are displayed in the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#definitionExpression)
     */
    definitionExpression: string;
    /**
     * An array of fields in the layer for which a [Domain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Domain.html) has been defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#domainFields)
     */
    domainFields: Field[];
    /**
     * An array of fields in the layer. Each field represents an attributethat may contain a value for each raster in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#fields)
     */
    fields: Field[];
    /**
     * The format of the exported image.**Possible Values:** png | png8 | png24 | png32 | jpg | bmp | jpgpng | lerc | tiff
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#format)
     */
    format: string;
    /**
     * Indicates if the layer has [multidimensionalInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#multidimensionalInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#hasMultidimensions)
     */
    hasMultidimensions: boolean;
    /**
     * Indicates if the Image Service has a [raster attribute table](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#rasterAttributeTable).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#hasRasterAttributeTable)
     */
    hasRasterAttributeTable: boolean;
    /**
     * Indicates the maximum height of the image exported by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#imageMaxHeight)
     *
     * @default 4100
     */
    imageMaxHeight: number;
    /**
     * Indicates the maximum width of the image exported by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#imageMaxWidth)
     *
     * @default 15000
     */
    imageMaxWidth: number;
    /**
     * Defines how to interpolate pixel values.**Possible Values:**  nearest | bilinear | cubic | majority
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#interpolation)
     */
    interpolation: string;
    /**
     * Defines how overlapping images should be mosaicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#mosaicRule)
     */
    mosaicRule: MosaicRule;
    /**
     * The multidimensional information associated with the layerif the layer's [hasMultidimensions](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#hasMultidimensions) propertyis `true`. If defined, multidimensional information contains various dimensionsof data for a particular value, such as time, depth, altitude, etc. Definingslices of particular dimensions in the layer is handled with the[multidimensionalDefinition](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#multidimensionalDefinition)property of the [mosaicRule](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#mosaicRule).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#multidimensionalInfo)
     *
     * @default null
     */
    multidimensionalInfo: any;
    /**
     * The pixel value representing no available information.Can be a number (same value for all bands) or array (specific value for each band).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#noData)
     */
    noData: number | number[];
    /**
     * Interpretation of the [noData](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#noData) setting.**Possible values:**Value | Description |----- | ----------- |any | Pixel is transparent if any band matches `noData` value.all | Pixel is transparent only if all bands match `noData` value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#noDataInterpretation)
     */
    noDataInterpretation: string;
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#fields) containinga unique value or identifier for each raster in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#objectIdField)
     */
    objectIdField: string;
    /**
     * A function that processes [pixelData](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-ImageryLayerView.html#pixelData).The `pixelData` object contains a[pixelBlock](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html) property that givesyou access to all of the pixels in the raster on the client.Inside the `pixelFilter` you may loop through all the[pixels](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#pixels) found in the`pixelBlock` property of the `pixelData` object and process them.This function may be used to hide some pixels from the view, alter theirvalues, and change their color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#pixelFilter)
     */
    pixelFilter: Function;
    /**
     * Raster source pixel type.**Possible Values:**Value | Range of values that each cell can contain |----- | ------------------------------------------- |unknown | Pixel type is unknown |s8 | -128 to 127 |s16 | -32768 to 32767 |s32 | -2147483648 to 2147483647 |u8 | 0 to 255 |u16 | 0 to 65535u32 | 0 to 4294967295f32 | -3.402823466e+38 to 3.402823466e+38f64 | 0 to 18446744073709551616
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#pixelType)
     */
    pixelType: "s8" | "s16" | "s32" | "u8" | "u16" | "u32" | "f32" | "f64";
    /**
     * The raster attribute table associated with the service. To access theraster attribute table, the layer must be [loaded](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#loaded).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#rasterAttributeTable)
     */
    rasterAttributeTable: any;
    /**
     * Prefix used to define the fields from the raster attribute table.It's primarily used for [popups](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#rasterAttributeTableFieldPrefix)
     */
    rasterAttributeTableFieldPrefix: string;
    /**
     * A complete list of fields that consists of fields from the layer, pixel value fieldsand the attribute table fields. This list is used for layer's[popupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#popupTemplate).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#rasterFields)
     */
    readonly rasterFields: Field[];
    /**
     * The renderer assigned to the layer. The renderer defines how to visualize pixels in the layer.Depending on the renderer type, the pixels may be [stretched](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html)across the color ramp, [classified](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html) orhave [different symbols](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html) based on values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#renderer)
     */
    renderer: Renderer;
    /**
     * Specifies the rule for how the requested image should be rendered.When renderingRule applied, the server returns an updated serviceinformation that reflects a custom processing as defined by the rendering rule.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#renderingRule)
     */
    renderingRule: RasterFunction;
    /**
     * Source raster information of the image service. The layer must be[loaded](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#loaded) before serviceRasterInfo can be accessed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#serviceRasterInfo)
     */
    readonly serviceRasterInfo: RasterInfo;
    /**
     * The spatial reference of the image service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#spatialReference)
     */
    readonly spatialReference: SpatialReference;
    /**
     * The URL to the REST endpoint of the layer. The URL may either pointto a resource on ArcGIS Enterprise or ArcGIS Online.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#url)
     */
    url: string;
    /**
     * The version of ArcGIS Server in which the image service is published.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#version)
     */
    readonly version: number;

    /**
     * Returns an image using the[export REST operation](https://developers.arcgis.com/rest/services-reference/export-image.htm) that displaysdata from an [ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#fetchImage)
     *
     * @param extent The extent of the image  to export.
     * @param width The width of the image in pixels.
     * @param height The height of the image in pixels.
     * @param options The parameter options is an object with the following properties.
     * @param options.signal An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     */
    fetchImage(
      extent: Extent,
      width: number,
      height: number,
      options?: ArcGISImageServiceFetchImageOptions
    ): IPromise<any>;
    /**
     * Generates raster info for the specified rendering rule.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#generateRasterInfo)
     *
     * @param renderingRule Rendering rule for the requested raster info.
     *
     */
    generateRasterInfo(renderingRule: RasterFunction): IPromise<RasterInfo>;
  }

  interface ArcGISImageServiceConstructor {
    new (properties?: ArcGISImageServiceProperties): ArcGISImageService;

    fromJSON(json: any): ArcGISImageService;
  }

  export const ArcGISImageService: ArcGISImageServiceConstructor;

  interface ArcGISImageServiceProperties {
    /**
     * The compression quality value. Controls how much loss the image will be subjected to by the compression algorithm.Valid value ranges of compression quality are from 0 to 100. Only valid when using `jpg` or `jpgpng` [image format](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#format).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#compressionQuality)
     */
    compressionQuality?: number;
    /**
     * Controls the tolerance of the lerc compression algorithm.The tolerance defines the maximum possible error of pixel values in the compressed image. It's a double value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#compressionTolerance)
     *
     * @default 0.01
     */
    compressionTolerance?: number;
    /**
     * The copyright text as defined by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#copyright)
     */
    copyright?: string;
    /**
     * The SQL where clause used to filter rasters on the client. Only the rasters that satisfy the definitionexpression are displayed in the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#definitionExpression)
     */
    definitionExpression?: string;
    /**
     * An array of fields in the layer for which a [Domain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Domain.html) has been defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#domainFields)
     */
    domainFields?: FieldProperties[];
    /**
     * An array of fields in the layer. Each field represents an attributethat may contain a value for each raster in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#fields)
     */
    fields?: FieldProperties[];
    /**
     * The format of the exported image.**Possible Values:** png | png8 | png24 | png32 | jpg | bmp | jpgpng | lerc | tiff
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#format)
     */
    format?: string;
    /**
     * Indicates if the layer has [multidimensionalInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#multidimensionalInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#hasMultidimensions)
     */
    hasMultidimensions?: boolean;
    /**
     * Indicates if the Image Service has a [raster attribute table](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#rasterAttributeTable).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#hasRasterAttributeTable)
     */
    hasRasterAttributeTable?: boolean;
    /**
     * Indicates the maximum height of the image exported by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#imageMaxHeight)
     *
     * @default 4100
     */
    imageMaxHeight?: number;
    /**
     * Indicates the maximum width of the image exported by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#imageMaxWidth)
     *
     * @default 15000
     */
    imageMaxWidth?: number;
    /**
     * Defines how to interpolate pixel values.**Possible Values:**  nearest | bilinear | cubic | majority
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#interpolation)
     */
    interpolation?: string;
    /**
     * Defines how overlapping images should be mosaicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#mosaicRule)
     */
    mosaicRule?: MosaicRuleProperties;
    /**
     * The multidimensional information associated with the layerif the layer's [hasMultidimensions](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#hasMultidimensions) propertyis `true`. If defined, multidimensional information contains various dimensionsof data for a particular value, such as time, depth, altitude, etc. Definingslices of particular dimensions in the layer is handled with the[multidimensionalDefinition](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#multidimensionalDefinition)property of the [mosaicRule](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#mosaicRule).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#multidimensionalInfo)
     *
     * @default null
     */
    multidimensionalInfo?: any;
    /**
     * The pixel value representing no available information.Can be a number (same value for all bands) or array (specific value for each band).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#noData)
     */
    noData?: number | number[];
    /**
     * Interpretation of the [noData](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#noData) setting.**Possible values:**Value | Description |----- | ----------- |any | Pixel is transparent if any band matches `noData` value.all | Pixel is transparent only if all bands match `noData` value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#noDataInterpretation)
     */
    noDataInterpretation?: string;
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#fields) containinga unique value or identifier for each raster in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#objectIdField)
     */
    objectIdField?: string;
    /**
     * A function that processes [pixelData](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-ImageryLayerView.html#pixelData).The `pixelData` object contains a[pixelBlock](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html) property that givesyou access to all of the pixels in the raster on the client.Inside the `pixelFilter` you may loop through all the[pixels](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#pixels) found in the`pixelBlock` property of the `pixelData` object and process them.This function may be used to hide some pixels from the view, alter theirvalues, and change their color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#pixelFilter)
     */
    pixelFilter?: Function;
    /**
     * Raster source pixel type.**Possible Values:**Value | Range of values that each cell can contain |----- | ------------------------------------------- |unknown | Pixel type is unknown |s8 | -128 to 127 |s16 | -32768 to 32767 |s32 | -2147483648 to 2147483647 |u8 | 0 to 255 |u16 | 0 to 65535u32 | 0 to 4294967295f32 | -3.402823466e+38 to 3.402823466e+38f64 | 0 to 18446744073709551616
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#pixelType)
     */
    pixelType?: "s8" | "s16" | "s32" | "u8" | "u16" | "u32" | "f32" | "f64";
    /**
     * The raster attribute table associated with the service. To access theraster attribute table, the layer must be [loaded](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#loaded).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#rasterAttributeTable)
     */
    rasterAttributeTable?: any;
    /**
     * Prefix used to define the fields from the raster attribute table.It's primarily used for [popups](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#rasterAttributeTableFieldPrefix)
     */
    rasterAttributeTableFieldPrefix?: string;
    /**
     * The renderer assigned to the layer. The renderer defines how to visualize pixels in the layer.Depending on the renderer type, the pixels may be [stretched](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html)across the color ramp, [classified](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html) orhave [different symbols](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html) based on values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#renderer)
     */
    renderer?: RendererProperties;
    /**
     * Specifies the rule for how the requested image should be rendered.When renderingRule applied, the server returns an updated serviceinformation that reflects a custom processing as defined by the rendering rule.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#renderingRule)
     */
    renderingRule?: RasterFunctionProperties;
    /**
     * The URL to the REST endpoint of the layer. The URL may either pointto a resource on ArcGIS Enterprise or ArcGIS Online.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#url)
     */
    url?: string;
  }

  export interface ArcGISImageServiceFetchImageOptions extends Object {
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#fetchImage)
     */
    signal?: AbortSignal;
  }

  interface ArcGISMapService {
    /**
     * Indicates the layer's supported capabilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#capabilities)
     */
    readonly capabilities: ArcGISMapServiceCapabilities;
    /**
     * The copyright text as defined by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#copyright)
     */
    copyright: string;
    /**
     * The full extent of the layer as defined by the map service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#fullExtent)
     */
    fullExtent: Extent;
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled: boolean;
    /**
     * The spatial reference of the layer as defined by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#spatialReference)
     */
    readonly spatialReference: SpatialReference;
    /**
     * The version of ArcGIS Server in which the map service is published.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#version)
     */
    readonly version: number;
  }

  interface ArcGISMapServiceConstructor {
    new (properties?: ArcGISMapServiceProperties): ArcGISMapService;

    fromJSON(json: any): ArcGISMapService;
  }

  export const ArcGISMapService: ArcGISMapServiceConstructor;

  interface ArcGISMapServiceProperties {
    /**
     * The copyright text as defined by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#copyright)
     */
    copyright?: string;
    /**
     * The full extent of the layer as defined by the map service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#fullExtent)
     */
    fullExtent?: ExtentProperties;
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled?: boolean;
  }

  export interface ArcGISMapServiceCapabilities extends Object {
    /**
     * Indicates options supported by the exportMap operation. Will be `null` if the `supportsExportMap` is `false`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#capabilities)
     */
    exportMap: ArcGISMapServiceCapabilitiesExportMap;
    /**
     * Indicates options supported by the exportTiles operation. Will be `null` if the `supportsExportTiles` is `false`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#capabilities)
     */
    exportTiles: ArcGISMapServiceCapabilitiesExportTiles;
    /**
     * Indicates operations that can be performed on the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#capabilities)
     */
    operations: ArcGISMapServiceCapabilitiesOperations;
  }

  export interface ArcGISMapServiceCapabilitiesExportMap extends Object {
    /**
     * Indicates if sublayers can be added, removed, or reordered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#capabilities)
     */
    supportsSublayersChanges: boolean;
    /**
     * Indicates if sublayers rendering can be modified or added using dynamic layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#capabilities)
     */
    supportsDynamicLayers: boolean;
    /**
     * Indicates if sublayers [visibility](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#visible) can be changed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#capabilities)
     */
    supportsSublayerVisibility: boolean;
    /**
     * Indicates if sublayers [definition expression](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#definitionExpression) can be set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#capabilities)
     */
    supportsSublayerDefinitionExpression: boolean;
  }

  export interface ArcGISMapServiceCapabilitiesExportTiles extends Object {
    /**
     * Specifies the maximum number of tiles that can be exported to a cache dataset or a tile package.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#capabilities)
     */
    maxExportTilesCount: number;
  }

  export interface ArcGISMapServiceCapabilitiesOperations extends Object {
    /**
     * Indicates if features in the sublayers can be [queried](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#queryFeatures).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#capabilities)
     */
    supportsQuery: boolean;
    /**
     * Indicates if the service can generate images.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#capabilities)
     */
    supportsExportMap: boolean;
    /**
     * Indicates if the tiles from the service can be exported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#capabilities)
     */
    supportsExportTiles: boolean;
    /**
     * Indicates if the service exposes a tile map that describes the presence of tiles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#capabilities)
     */
    supportsTileMap: boolean;
  }

  interface PortalLayer {
    /**
     * The portal item from which the layer is loaded. If the portal item referencesa Feature Service or Scene Service, then you can specify a single layerto load with the [layerId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-PortalLayer.html#layerId) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-PortalLayer.html#portalItem)
     */
    portalItem: PortalItem;
  }

  interface PortalLayerConstructor {
    new (properties?: PortalLayerProperties): PortalLayer;

    fromJSON(json: any): PortalLayer;
  }

  export const PortalLayer: PortalLayerConstructor;

  interface PortalLayerProperties {
    /**
     * The portal item from which the layer is loaded. If the portal item referencesa Feature Service or Scene Service, then you can specify a single layerto load with the [layerId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-PortalLayer.html#layerId) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-PortalLayer.html#portalItem)
     */
    portalItem?: PortalItemProperties;
  }

  interface RefreshableLayer {
    /**
     * Refresh interval of the layer in minutes. Value of `0` indicates no refresh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-RefreshableLayer.html#refreshInterval)
     *
     * @default 0
     */
    refreshInterval: number;

    /**
     * Fetches all the data for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-RefreshableLayer.html#refresh)
     *
     *
     */
    refresh(): void;
  }

  interface RefreshableLayerConstructor {
    new (): RefreshableLayer;
  }

  export const RefreshableLayer: RefreshableLayerConstructor;

  interface RefreshableLayerProperties {
    /**
     * Refresh interval of the layer in minutes. Value of `0` indicates no refresh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-RefreshableLayer.html#refreshInterval)
     *
     * @default 0
     */
    refreshInterval?: number;
  }

  interface ScaleRangeLayer {
    /**
     * The maximum scale (most zoomed in) at which the layer is visible in the view.If the map is zoomed in beyond this scale, the layer will not be visible.A value of `0` means the layer does not have a maximum scale.The maxScale value should always be smaller than the [minScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ScaleRangeLayer.html#minScale) value,and greater than or equal to the service specification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ScaleRangeLayer.html#maxScale)
     *
     * @default 0
     */
    maxScale: number;
    /**
     * The minimum scale (most zoomed out) at which the layer is visible in the view.If the map is zoomed out beyond this scale, the layer will not be visible.A value of `0` means the layer does not have a minimum scale.The minScale value should always be larger than the [maxScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ScaleRangeLayer.html#maxScale) value,and lesser than or equal to the service specification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ScaleRangeLayer.html#minScale)
     *
     * @default 0
     */
    minScale: number;
  }

  interface ScaleRangeLayerConstructor {
    new (): ScaleRangeLayer;
  }

  export const ScaleRangeLayer: ScaleRangeLayerConstructor;

  interface ScaleRangeLayerProperties {
    /**
     * The maximum scale (most zoomed in) at which the layer is visible in the view.If the map is zoomed in beyond this scale, the layer will not be visible.A value of `0` means the layer does not have a maximum scale.The maxScale value should always be smaller than the [minScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ScaleRangeLayer.html#minScale) value,and greater than or equal to the service specification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ScaleRangeLayer.html#maxScale)
     *
     * @default 0
     */
    maxScale?: number;
    /**
     * The minimum scale (most zoomed out) at which the layer is visible in the view.If the map is zoomed out beyond this scale, the layer will not be visible.A value of `0` means the layer does not have a minimum scale.The minScale value should always be larger than the [maxScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ScaleRangeLayer.html#maxScale) value,and lesser than or equal to the service specification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ScaleRangeLayer.html#minScale)
     *
     * @default 0
     */
    minScale?: number;
  }

  interface SceneService {
    /**
     * The copyright text as defined by the scene service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#copyright)
     */
    copyright: string;
    /**
     * The layer ID, or layer index, of a Scene Service layer. This is particularly useful whenloading a single layer with the [portalItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#portalItem) property from a service containingmultiple layers. You can specify this value in one of two scenarios:* When loading the layer via the [portalItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#portalItem) property.* When pointing the layer [url](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#url) directly to the Scene Service.If a layerId is not specified in either of the above scenarios, then the first layerin the service (`layerId = 0`) is selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#layerId)
     */
    layerId: number;
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#spatialReference)
     */
    spatialReference: SpatialReference;
    /**
     * The URL of the REST endpoint of the layer or scene service. The URL may either point to aresource on ArcGIS Enterprise or ArcGIS Online.The layer may be specified using the [layerId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#layerId) property when the url points directly to a service and not a specific layer.If [layerId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#layerId) is not specified, then it will default to the first layer in the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#url)
     */
    url: string;
    /**
     * The version of the scene service specification used for this service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#version)
     */
    readonly version: SceneServiceVersion;
  }

  interface SceneServiceConstructor {
    new (properties?: SceneServiceProperties): SceneService;

    fromJSON(json: any): SceneService;
  }

  export const SceneService: SceneServiceConstructor;

  interface SceneServiceProperties {
    /**
     * The copyright text as defined by the scene service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#copyright)
     */
    copyright?: string;
    /**
     * The layer ID, or layer index, of a Scene Service layer. This is particularly useful whenloading a single layer with the [portalItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#portalItem) property from a service containingmultiple layers. You can specify this value in one of two scenarios:* When loading the layer via the [portalItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#portalItem) property.* When pointing the layer [url](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#url) directly to the Scene Service.If a layerId is not specified in either of the above scenarios, then the first layerin the service (`layerId = 0`) is selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#layerId)
     */
    layerId?: number;
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * The URL of the REST endpoint of the layer or scene service. The URL may either point to aresource on ArcGIS Enterprise or ArcGIS Online.The layer may be specified using the [layerId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#layerId) property when the url points directly to a service and not a specific layer.If [layerId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#layerId) is not specified, then it will default to the first layer in the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#url)
     */
    url?: string;
  }

  export interface SceneServiceVersion extends Object {
    /**
     * The major version of the scene layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#version)
     */
    major: number;
    /**
     * The minor version of the scene layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#version)
     */
    minor: number;
    /**
     * The complete version string of the scene layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#version)
     */
    versionString: string;
  }

  interface SublayersOwner {
    /**
     * Returns a deep clone of a map service's[sublayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html) as defined by the service.This is useful for scenarios when the developer is unfamiliar with theservice sublayers and needs to "reset" the layer's sublayers to matchthose defined by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SublayersOwner.html#createServiceSublayers)
     *
     *
     */
    createServiceSublayers(): Collection<Sublayer>;
    /**
     * Returns the sublayer with the given layerId.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SublayersOwner.html#findSublayerById)
     *
     * @param id The [id](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#id)of the sublayer.
     *
     */
    findSublayerById(id: number): Sublayer;
  }

  interface SublayersOwnerConstructor {
    new (): SublayersOwner;
  }

  export const SublayersOwner: SublayersOwnerConstructor;

  interface TemporalLayer {
    /**
     * The time info provides information such as date fields that store[start](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#startField)and [end](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#endField) timefor each feature and the [full time extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#fullTimeExtent)for the layer. The `timeInfo` along with its `startField` and `endField` properties must be set at thetime of layer initialization if it is being set for[GeoJSONLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html), [CSVLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html) or[FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) initialized from[client-side features](esri-layers-FeatureLayer.html#creating-a-featurelayer).The [full time extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#fullTimeExtent) for the timeInfo isautomatically calculated based on `start` and `end` fields.The timeInfo parameters cannot be changed after the layer is [loaded](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#load).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-TemporalLayer.html#timeInfo)
     *
     * @default null
     */
    timeInfo: TimeInfo;
  }

  interface TemporalLayerConstructor {
    new (): TemporalLayer;
  }

  export const TemporalLayer: TemporalLayerConstructor;

  interface TemporalLayerProperties {
    /**
     * The time info provides information such as date fields that store[start](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#startField)and [end](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#endField) timefor each feature and the [full time extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#fullTimeExtent)for the layer. The `timeInfo` along with its `startField` and `endField` properties must be set at thetime of layer initialization if it is being set for[GeoJSONLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html), [CSVLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html) or[FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) initialized from[client-side features](esri-layers-FeatureLayer.html#creating-a-featurelayer).The [full time extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#fullTimeExtent) for the timeInfo isautomatically calculated based on `start` and `end` fields.The timeInfo parameters cannot be changed after the layer is [loaded](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#load).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-TemporalLayer.html#timeInfo)
     *
     * @default null
     */
    timeInfo?: TimeInfoProperties;
  }

  interface OpenStreetMapLayer extends WebTileLayer {
    on(name: "layerview-create", eventHandler: OpenStreetMapLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: OpenStreetMapLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: OpenStreetMapLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface OpenStreetMapLayerConstructor {
    new (properties?: OpenStreetMapLayerProperties): OpenStreetMapLayer;
  }

  export const OpenStreetMapLayer: OpenStreetMapLayerConstructor;

  interface OpenStreetMapLayerProperties extends WebTileLayerProperties {}

  export interface OpenStreetMapLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface OpenStreetMapLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface OpenStreetMapLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface PointCloudFilter extends Accessor, JSONSupport {
    /**
     * The field used for applying the filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudFilter.html#field)
     */
    field: string;
    /**
     * The type of filter.**Possible values**: value | bitfield | return
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudFilter.html#type)
     */
    readonly type: "value" | "bitfield" | "return";
  }

  interface PointCloudFilterConstructor {
    new (properties?: PointCloudFilterProperties): PointCloudFilter;

    fromJSON(json: any): PointCloudFilter;
  }

  export const PointCloudFilter: PointCloudFilterConstructor;

  interface PointCloudFilterProperties {
    /**
     * The field used for applying the filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudFilter.html#field)
     */
    field?: string;
  }

  interface PointCloudReturnFilter extends PointCloudFilter {
    /**
     * An array of return types used to filter points. Possible values for the return types are: * `firstOfMany`: the point was the first to be collected in a series of many returns * `last`: the last point in a series of many returns or a single point * `lastOfMany`: the last point in a series of many returns * `single`: all the points that were collected from laser pulses with a single return
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudReturnFilter.html#includedReturns)
     */
    includedReturns: ("firstOfMany" | "last" | "lastOfMany" | "single")[];
    /**
     * For PointCloudReturnFilter the type is always `return`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudReturnFilter.html#type)
     */
    readonly type: "return";
  }

  interface PointCloudReturnFilterConstructor {
    new (properties?: PointCloudReturnFilterProperties): PointCloudReturnFilter;

    fromJSON(json: any): PointCloudReturnFilter;
  }

  export const PointCloudReturnFilter: PointCloudReturnFilterConstructor;

  interface PointCloudReturnFilterProperties extends PointCloudFilterProperties {
    /**
     * An array of return types used to filter points. Possible values for the return types are: * `firstOfMany`: the point was the first to be collected in a series of many returns * `last`: the last point in a series of many returns or a single point * `lastOfMany`: the last point in a series of many returns * `single`: all the points that were collected from laser pulses with a single return
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudReturnFilter.html#includedReturns)
     */
    includedReturns?: ("firstOfMany" | "last" | "lastOfMany" | "single")[];
  }

  interface PointCloudValueFilter extends PointCloudFilter {
    /**
     * Whether points should be included or excluded from the filter.**Possible values:** include | exclude
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudValueFilter.html#mode)
     *
     * @default "exclude"
     */
    mode: "include" | "exclude";
    /**
     * For PointCloudValueFilter the type is always `value`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudValueFilter.html#type)
     */
    readonly type: "value";
    /**
     * An array of numeric values representing the classification codesthat the filter should apply.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudValueFilter.html#values)
     */
    values: number[];
  }

  interface PointCloudValueFilterConstructor {
    new (properties?: PointCloudValueFilterProperties): PointCloudValueFilter;

    fromJSON(json: any): PointCloudValueFilter;
  }

  export const PointCloudValueFilter: PointCloudValueFilterConstructor;

  interface PointCloudValueFilterProperties extends PointCloudFilterProperties {
    /**
     * Whether points should be included or excluded from the filter.**Possible values:** include | exclude
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudValueFilter.html#mode)
     *
     * @default "exclude"
     */
    mode?: "include" | "exclude";
    /**
     * An array of numeric values representing the classification codesthat the filter should apply.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudValueFilter.html#values)
     */
    values?: number[];
  }

  interface PointCloudLayer extends Layer, SceneService, PortalLayer, ScaleRangeLayer {
    /**
     * Specifies how points are placed on the vertical axis (z). This propertyonly affects [PointCloudLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html) when using the `absolute-height` mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#elevationInfo)
     */
    elevationInfo: PointCloudLayerElevationInfo;
    /**
     * An array of fields accessible in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#fields)
     */
    fields: Field[];
    /**
     * An array of [pointCloudFilters](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudFilter.html) used to filter points.Only the points that satisfy all the filters are displayed in the view. There are two types of filters that can beset: [PointCloudValueFilter](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudValueFilter.html) filters points based on classification values and[PointCloudReturnFilter](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudReturnFilter.html) filters points based on return values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#filters)
     */
    filters: (PointCloudValueFilter | PointCloudReturnFilter)[];
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled: boolean;
    /**
     * The renderer assigned to the layer. The renderer defines how tovisualize each point in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#renderer)
     */
    renderer: PointCloudRenderer;

    on(name: "layerview-create", eventHandler: PointCloudLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: PointCloudLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: PointCloudLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface PointCloudLayerConstructor {
    new (properties?: PointCloudLayerProperties): PointCloudLayer;

    fromJSON(json: any): PointCloudLayer;
  }

  export const PointCloudLayer: PointCloudLayerConstructor;

  interface PointCloudLayerProperties
    extends LayerProperties,
      SceneServiceProperties,
      PortalLayerProperties,
      ScaleRangeLayerProperties {
    /**
     * Specifies how points are placed on the vertical axis (z). This propertyonly affects [PointCloudLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html) when using the `absolute-height` mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#elevationInfo)
     */
    elevationInfo?: PointCloudLayerElevationInfo;
    /**
     * An array of fields accessible in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#fields)
     */
    fields?: FieldProperties[];
    /**
     * An array of [pointCloudFilters](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudFilter.html) used to filter points.Only the points that satisfy all the filters are displayed in the view. There are two types of filters that can beset: [PointCloudValueFilter](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudValueFilter.html) filters points based on classification values and[PointCloudReturnFilter](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudReturnFilter.html) filters points based on return values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#filters)
     */
    filters?: (PointCloudValueFilterProperties | PointCloudReturnFilterProperties)[];
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled?: boolean;
    /**
     * The renderer assigned to the layer. The renderer defines how tovisualize each point in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#renderer)
     */
    renderer?: PointCloudRendererProperties;
  }

  export interface PointCloudLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface PointCloudLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface PointCloudLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  export interface PointCloudLayerElevationInfo extends Object {
    /**
     * Defines how the points are placed on the vertical axis (z).Currently only `absolute-height` mode is supported.Mode | Description------|------------absolute-height | Points are placed at an absolute elevation (z-value) above sea level. This z-value is determined by summing up the `offset` value and the point's z-value. It doesn't take the elevation of the terrain into account. This is the only supported elevation mode for a [PointCloudLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#elevationInfo)
     */
    mode: string;
    /**
     * An elevation offset, which is added to the vertical position of each point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#elevationInfo)
     *
     * @default 0
     */
    offset?: number;
    /**
     * The unit for `offset` values.**Possible Values:** feet | meters | kilometers | miles | us-feet | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#elevationInfo)
     *
     * @default meters
     */
    unit?: string;
  }

  interface SceneLayer extends Layer, SceneService, PortalLayer, ScaleRangeLayer {
    /**
     * The SQL where clause used to filter features on the client. Only the features that satisfy the definitionexpression are displayed in the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html). Setting a definition expression is usefulwhen only a subset of the data in the layer should be displayed.Setting the definition expression of a layer automatically updates all layer views.If the definition expression is set after the layer has been added to the map, the view willautomatically refresh itself to display the features that satisfy the new definition expression.Important to note is that the initial loading time of the features remains unchanged, even if they are filtered.This happens because, as opposed to Feature Layers, feature filtering is done client-side. As a result all features need to be downloaded always for filter evaluation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#definitionExpression)
     */
    definitionExpression: string;
    /**
     * Specifies how graphics are placed on the vertical axis (z). See the [ElevationInfo sample](https://developers.arcgis.com/javascript/latest/sample-code/scene-elevationinfo/index.html)for an example of how this property may be used.This property only affects 3D Object [SceneLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html) when using the `absolute-height` mode. [SceneLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html) with[Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometries support all the elevation modes listed below.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#elevationInfo)
     */
    elevationInfo: SceneLayerElevationInfo;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#featureReduction)
     */
    featureReduction: SceneLayerFeatureReduction;
    /**
     * An array of fields accessible in the layer. Depending on the scene service, fields mayhave limited support for certain capabilities. Use[getFieldUsageInfo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#getFieldUsageInfo) to querythe contexts (rendering, labeling, popups or querying) for which a particular field may be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#fields)
     */
    readonly 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/api-reference/esri-layers-support-FieldsIndex.html#dateFields) in a layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#fieldsIndex)
     */
    readonly fieldsIndex: FieldsIndex;
    /**
     * The geometry type of features in the layer.**Possible Values:** point | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#geometryType)
     */
    geometryType: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#labelingInfo)
     */
    labelingInfo: LabelClass[];
    /**
     * Indicates whether to display labels for this layer. If `true`, labels willappear as defined in the [labelingInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#labelingInfo) property.This property is only relevant to SceneLayers with[Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometries. This property has no effecton SceneLayers with other geometry types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#labelsVisible)
     *
     * @default true
     */
    labelsVisible: boolean;
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled: boolean;
    /**
     * The name of the field containing each graphic's Object ID.If this is not explicitly specified, this is automaticallyderived from the [fields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#fields) of the service by takingthe first field of type `oid`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#objectIdField)
     */
    objectIdField: string;
    /**
     * 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/api-reference/esri-layers-SceneLayer.html#renderer),[labeling](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#labelingInfo) and setting the [elevation info](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#elevationInfo) for the layer.The required fields and `outFields` are used to populate[SceneLayerView.availableFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#availableFields).Set this property to include the fields that will be used for client-side[queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#queryFeatures)if the fields are not part of required fields used for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#outFields)
     *
     * @default null
     */
    outFields: string[];
    /**
     * 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/api-reference/esri-layers-SceneLayer.html#popupTemplate) to define whatinformation should be displayed in the popup. Alternatively, a default popup template may be automatically used if[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#popupEnabled)
     *
     * @default true
     */
    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](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#popup) when a feature is selectedusing text and/or charts. See the [PopupTemplate sample](https://developers.arcgis.com/javascript/latest/sample-code/intro-popuptemplate/index.html)for an example of how [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) interacts with a[FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html). Setting a [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html)on this layer type is done in the same way as a FeatureLayer.A default popup template is automatically used if no `popupTemplate` has been defined when[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled)is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * The renderer assigned to the layer. The renderer defines how tovisualize each feature in the layer. Depending on the renderer type,features may be visualized with the same symbol, or with varying symbolsbased on the values of provided attribute fields or functions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#renderer)
     */
    renderer: Renderer;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#screenSizePerspectiveEnabled)
     *
     * @default true
     */
    screenSizePerspectiveEnabled: boolean;

    /**
     * Creates a default popup template for the layer, populated with all the fields of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#createPopupTemplate)
     *
     * @param options Options for creating the popup template.
     * @param options.maximumFields The maximum number of fields to include in the  popup template.
     * @param options.ignoreFieldTypes Field types to ignore when creating the popup.  By default the `geometry`, `blob`, `raster`, `guid` and `xml` field types are ignored.
     *
     */
    createPopupTemplate(options?: SceneLayerCreatePopupTemplateOptions): PopupTemplate;
    /**
     * Creates a query object that can be used to fetch features thatsatisfy the layer's current definition expression. The query shouldonly be used on the layer and not on the layer view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#createQuery)
     *
     *
     */
    createQuery(): Query;
    /**
     * Returns the [Field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html) instance for a field name (case-insensitive).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#getField)
     *
     * @param fieldName Name of the field.
     *
     */
    getField(fieldName: string): Field;
    /**
     * Returns the [Domain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Domain.html) associated with the given field name. The domain can be either a[CodedValueDomain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-CodedValueDomain.html) or [RangeDomain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RangeDomain.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#getFieldDomain)
     *
     * @param fieldName Name of the field.
     *
     */
    getFieldDomain(fieldName: string): Domain;
    /**
     * Gets field usage information. The usage of a field depends on whether it is storedas part of the scene service cache. The returned object contains the following usage information:Property              | Type    | Description----------------------|---------|------------supportsRenderer      | boolean | Indicates that a field can be used in a renderer (e.g. in visual variables), [see renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#renderer).supportsLabelingInfo  | boolean | Indicates that a field can be used for labeling, [see labelingInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#labelingInfo).supportsPopupTemplate | boolean | Indicates that a field can be used in a popup template, [see popupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#popupTemplate).supportsLayerQuery    | boolean | Indicates that a field can be used in layer queries, [see queryFeatures()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#queryFeatures).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#getFieldUsageInfo)
     *
     * @param fieldName The name of the field to get usage info for.
     *
     */
    getFieldUsageInfo(fieldName: string): any;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html) against the service and returns the 2D[Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of features that satisfy the query.At the moment the 3D Extent can be returned by using[SceneLayerView.queryExtent()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#queryExtent),but this will return the 3D extent only for features currently in the view.The query succeeds only if the layer's `supportsLayerQuery` capability is enabled. Use the[getFieldUsageInfo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#getFieldUsageInfo) method to check if the layer supports queries.If querying is not enabled, then an errorwith the name `scenelayer:query-not-available` is thrown. Read more about queries in the [Querying](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#querying)section of the class description above.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#queryExtent)
     *
     * @param query Specifies the query parameters.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryExtent(query?: Query | QueryProperties, options?: SceneLayerQueryExtentOptions): IPromise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html) against the feature service and returns the number ofthe features that satisfy the query. The query succeeds only ifthe layer's `supportsLayerQuery` capability is enabled. Use the[getFieldUsageInfo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#getFieldUsageInfo) method to check if the layer supports queries.If querying is not enabled, then an errorwith the name `scenelayer:query-not-available` is thrown. Read more about queries in the [Querying](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#querying)section of the class description above.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#queryFeatureCount)
     *
     * @param query Specifies the query parameters.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryFeatureCount(query?: Query | QueryProperties, options?: SceneLayerQueryFeatureCountOptions): IPromise<number>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html) against the service and returns a[FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html). The query succeeds only ifthe layer's `supportsLayerQuery` capability is enabled. Use the[getFieldUsageInfo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#getFieldUsageInfo) method to check if the layer supports queries.If querying is not enabled, then an errorwith the name `scenelayer:query-not-available` is thrown. Read more about queries in the [Querying](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#querying)section of the class description above.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#queryFeatures)
     *
     * @param query Specifies the query parameters.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryFeatures(query?: Query | QueryProperties, options?: SceneLayerQueryFeaturesOptions): IPromise<FeatureSet>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html) against the service and returns an array of theObjectIDs of features that satisfy the input query. The query succeeds only ifthe layer's `supportsLayerQuery` capability is enabled. Use the[getFieldUsageInfo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#getFieldUsageInfo) method to check if the layer supports queries.If querying is not enabled, then an errorwith the name `scenelayer:query-not-available` is thrown. Read more about queries in the [Querying](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#querying)section of the class description above.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#queryObjectIds)
     *
     * @param query Specifies the query parameters.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryObjectIds(query?: Query | QueryProperties, options?: SceneLayerQueryObjectIdsOptions): IPromise<number[]>;

    on(name: "layerview-create", eventHandler: SceneLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: SceneLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: SceneLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface SceneLayerConstructor {
    new (properties?: SceneLayerProperties): SceneLayer;

    fromJSON(json: any): SceneLayer;
  }

  export const SceneLayer: SceneLayerConstructor;

  interface SceneLayerProperties
    extends LayerProperties,
      SceneServiceProperties,
      PortalLayerProperties,
      ScaleRangeLayerProperties {
    /**
     * The SQL where clause used to filter features on the client. Only the features that satisfy the definitionexpression are displayed in the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html). Setting a definition expression is usefulwhen only a subset of the data in the layer should be displayed.Setting the definition expression of a layer automatically updates all layer views.If the definition expression is set after the layer has been added to the map, the view willautomatically refresh itself to display the features that satisfy the new definition expression.Important to note is that the initial loading time of the features remains unchanged, even if they are filtered.This happens because, as opposed to Feature Layers, feature filtering is done client-side. As a result all features need to be downloaded always for filter evaluation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#definitionExpression)
     */
    definitionExpression?: string;
    /**
     * Specifies how graphics are placed on the vertical axis (z). See the [ElevationInfo sample](https://developers.arcgis.com/javascript/latest/sample-code/scene-elevationinfo/index.html)for an example of how this property may be used.This property only affects 3D Object [SceneLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html) when using the `absolute-height` mode. [SceneLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html) with[Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometries support all the elevation modes listed below.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#elevationInfo)
     */
    elevationInfo?: SceneLayerElevationInfo;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#featureReduction)
     */
    featureReduction?: SceneLayerFeatureReduction;
    /**
     * The geometry type of features in the layer.**Possible Values:** point | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#geometryType)
     */
    geometryType?: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#labelingInfo)
     */
    labelingInfo?: LabelClassProperties[];
    /**
     * Indicates whether to display labels for this layer. If `true`, labels willappear as defined in the [labelingInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#labelingInfo) property.This property is only relevant to SceneLayers with[Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometries. This property has no effecton SceneLayers with other geometry types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#labelsVisible)
     *
     * @default true
     */
    labelsVisible?: boolean;
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled?: boolean;
    /**
     * The name of the field containing each graphic's Object ID.If this is not explicitly specified, this is automaticallyderived from the [fields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#fields) of the service by takingthe first field of type `oid`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#objectIdField)
     */
    objectIdField?: string;
    /**
     * 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/api-reference/esri-layers-SceneLayer.html#renderer),[labeling](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#labelingInfo) and setting the [elevation info](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#elevationInfo) for the layer.The required fields and `outFields` are used to populate[SceneLayerView.availableFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#availableFields).Set this property to include the fields that will be used for client-side[queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#queryFeatures)if the fields are not part of required fields used for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#outFields)
     *
     * @default null
     */
    outFields?: string[];
    /**
     * 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/api-reference/esri-layers-SceneLayer.html#popupTemplate) to define whatinformation should be displayed in the popup. Alternatively, a default popup template may be automatically used if[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#popupEnabled)
     *
     * @default true
     */
    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](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#popup) when a feature is selectedusing text and/or charts. See the [PopupTemplate sample](https://developers.arcgis.com/javascript/latest/sample-code/intro-popuptemplate/index.html)for an example of how [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) interacts with a[FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html). Setting a [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html)on this layer type is done in the same way as a FeatureLayer.A default popup template is automatically used if no `popupTemplate` has been defined when[Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled)is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * The renderer assigned to the layer. The renderer defines how tovisualize each feature in the layer. Depending on the renderer type,features may be visualized with the same symbol, or with varying symbolsbased on the values of provided attribute fields or functions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#renderer)
     */
    renderer?: RendererProperties;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#screenSizePerspectiveEnabled)
     *
     * @default true
     */
    screenSizePerspectiveEnabled?: boolean;
  }

  export interface SceneLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface SceneLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface SceneLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  export interface SceneLayerCreatePopupTemplateOptions extends Object {
    /**
     * The maximum number of fields to include in the  popup template.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#createPopupTemplate)
     *
     * @default 75
     */
    maximumFields?: number;
    /**
     * Field types to ignore when creating the popup.  By default the `geometry`, `blob`, `raster`, `guid` and `xml` field types are ignored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#createPopupTemplate)
     */
    ignoreFieldTypes?: string[];
  }

  export interface SceneLayerElevationInfo extends Object {
    /**
     * Defines how the graphic is placed with respect to the terrain surface.See the table below for a list of possible values.Mode | Description------|------------on-the-ground | Graphics are draped on the terrain surface. This is the default value for features with [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometries rendered with [ObjectSymbol3DLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html).relative-to-ground | The graphic is placed at an elevation relative to the terrain surface. The graphic's elevation is determined by summing up the terrain elevation, the `offset` value and the geometry's z-value (if present). This is the default value for [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometries rendered with [IconSymbol3DLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html).absolute-height | Graphics are placed at an absolute elevation (z-value) above sea level. This z-value is determined by summing up the `offset` value and the geometry's z-value (if present). It doesn't take the elevation of the terrain into account. This is the default value for features with 3D Object geometries and [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometries where [hasZ](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#hasZ) is `true`.relative-to-scene | Graphics are aligned to buildings and other objects part of 3D Object [SceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html) or [IntegratedMeshLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html), depending on which has higher elevation. If the graphic is not directly above a building or any other feature, it is aligned to the terrain surface elevation. If present, z-values will be ignored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#elevationInfo)
     */
    mode: string;
    /**
     * An elevation offset which is added to the vertical position of the graphic.When `mode = "on-the-ground"`, this property has no effect.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#elevationInfo)
     *
     * @default 0
     */
    offset?: number;
    /**
     * The unit for `offset` values.**Possible Values:** feet | meters | kilometers | miles | us-feet | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#elevationInfo)
     *
     * @default meters
     */
    unit?: string;
  }

  export interface SceneLayerFeatureReduction extends Object {
    /**
     * Type of the decluttering method. The only supported type at the moment is`"selection"`. In this method, some of the overlapping features are hidden such that none of the remaining featuresintersect on screen. Label deconfliction also respects this option and hides labels that would overlap with the features of this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#featureReduction)
     */
    type: string;
  }

  export interface SceneLayerQueryExtentOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#queryExtent)
     */
    signal?: AbortSignal;
  }

  export interface SceneLayerQueryFeatureCountOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#queryFeatureCount)
     */
    signal?: AbortSignal;
  }

  export interface SceneLayerQueryFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#queryFeatures)
     */
    signal?: AbortSignal;
  }

  export interface SceneLayerQueryObjectIdsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#queryObjectIds)
     */
    signal?: AbortSignal;
  }

  interface StreamLayer extends FeatureLayer {
    /**
     * Contains the attribute and spatial filters used to filter messages sent to theclient by a Stream Service.This property can be set in the constructor but is `read-only` after the layeris created. To change thefilter after the layer is created, use the [updateFilter()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#updateFilter) method.**Use definitionExpression or geometryDefinition instead.**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#filter)
     */
    readonly filter: StreamLayerFilter;
    /**
     * An extent object used to filter features. Only features intersecting theextent are displayed in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#geometryDefinition)
     */
    geometryDefinition: Extent;
    /**
     * Maximum number of features to show per [trackId](https://enterprise.arcgis.com/en/geoevent/latest/get-started/essential-geoevent-server-vocabulary.htm#ESRI_SECTION1_F45BBCE9ADFA4E57AF38DD225921EFCD).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#maximumTrackPoints)
     */
    maximumTrackPoints: number;
    /**
     * Options for purging stale features. Use these options to avoid overloading thebrowser with graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#purgeOptions)
     */
    purgeOptions: StreamLayerPurgeOptions;

    /**
     * Updates the [filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#filter) on the layer. The filter is updated on all views thatcontain the layer. If the input `filterChanges` object is `undefined` or `null`,the spatial and attribute filters are removed. To update the filter on a single layer viewassociated with the layer, use the[StreamLayerView.updateFilter()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#updateFilter)method after getting the layer view object.Filter changes only apply to incoming features. Features already displayed in theview will be removed automatically.**Use [definitionExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#definitionExpression) or [geometryDefinition](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#definitionExpression) instead.**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#updateFilter)
     *
     * @param filterChanges Updates the spatial and attribute [filters](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#filter)                              on the layer and all of its associated views.                              If `null`, all filters are cleared.
     * @param filterChanges.geometry A spatial filter forfiltering features.Only features that intersect the given geometry are displayed in the view(s).If `null`, the spatial filter is cleared.
     * @param filterChanges.where A SQL where clause used to filter features                       by attributes. If `null`, the attribute filter is cleared.
     *
     */
    updateFilter(filterChanges: StreamLayerUpdateFilterFilterChanges): IPromise<any>;

    on(name: "edits", eventHandler: StreamLayerEditsEventHandler): IHandle;

    on(name: "layerview-create", eventHandler: StreamLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: StreamLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: StreamLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface StreamLayerConstructor {
    new (properties?: StreamLayerProperties): StreamLayer;

    fromJSON(json: any): StreamLayer;
  }

  export const StreamLayer: StreamLayerConstructor;

  interface StreamLayerProperties extends FeatureLayerProperties {
    /**
     * Contains the attribute and spatial filters used to filter messages sent to theclient by a Stream Service.This property can be set in the constructor but is `read-only` after the layeris created. To change thefilter after the layer is created, use the [updateFilter()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#updateFilter) method.**Use definitionExpression or geometryDefinition instead.**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#filter)
     */
    filter?: StreamLayerFilter;
    /**
     * An extent object used to filter features. Only features intersecting theextent are displayed in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#geometryDefinition)
     */
    geometryDefinition?: ExtentProperties;
    /**
     * Maximum number of features to show per [trackId](https://enterprise.arcgis.com/en/geoevent/latest/get-started/essential-geoevent-server-vocabulary.htm#ESRI_SECTION1_F45BBCE9ADFA4E57AF38DD225921EFCD).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#maximumTrackPoints)
     */
    maximumTrackPoints?: number;
    /**
     * Options for purging stale features. Use these options to avoid overloading thebrowser with graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#purgeOptions)
     */
    purgeOptions?: StreamLayerPurgeOptions;
  }

  export interface StreamLayerEditsEvent {
    addedFeatures: StreamLayerEditsEventAddedFeatures[];

    deletedFeatures: StreamLayerEditsEventDeletedFeatures[];

    updatedFeatures: StreamLayerEditsEventUpdatedFeatures[];
  }

  export interface StreamLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface StreamLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface StreamLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  export interface StreamLayerFilter extends Object {
    /**
     * A spatial filter for filtering features.Only features that intersect the given geometry are displayed in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#filter)
     */
    geometry?: Extent;
    /**
     * A SQL where clause used to filter features by attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#filter)
     */
    where?: string;
  }

  export interface StreamLayerPurgeOptions extends Object {
    /**
     * The maximum number of features to display.Excess features are purged from the beginning of the graphics array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#purgeOptions)
     */
    displayCount: number;
    /**
     * The maximum time in minutes that a feature should be kept.                         After this time, the feature is removed from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#purgeOptions)
     */
    age: number;
  }

  export interface StreamLayerUpdateFilterFilterChanges extends Object {
    /**
     * A spatial filter forfiltering features.Only features that intersect the given geometry are displayed in the view(s).If `null`, the spatial filter is cleared.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#updateFilter)
     */
    geometry: Extent;
    /**
     * A SQL where clause used to filter features                       by attributes. If `null`, the attribute filter is cleared.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#updateFilter)
     */
    where: string;
  }

  export interface StreamLayerEditsEventAddedFeatures extends Object {
    objectId: number;
  }

  export interface StreamLayerEditsEventDeletedFeatures extends Object {
    objectId: number;
  }

  export interface StreamLayerEditsEventUpdatedFeatures extends Object {
    objectId: number;
  }

  interface AttachmentInfo extends Accessor, JSONSupport {
    /**
     * The content type of the attachment. For example, `'image/jpeg'`.See the [ArcGIS REST API documentation](https://developers.arcgis.com/rest/services-reference/query-attachments-feature-service-layer-.htm)for more information on supported attachment types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#contentType)
     */
    contentType: string;
    /**
     * An array of [ExifInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#ExifInfo) for the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#exifInfo)
     */
    exifInfo: ExifInfo[];
    /**
     * The identifier for the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#id)
     */
    id: number;
    /**
     * Keywords used for the attachments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#keywords)
     */
    keywords: string;
    /**
     * String value indicating the name of the file attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#name)
     */
    name: string;
    /**
     * The [OrientationInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#OrientationInfo) for the attachment.This is derived from the [exifInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#exifInfo).In order to read this, you must first set the attachment query's [returnMetadata](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#returnMetadata)to `true` to get the `exif` info associated with the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#orientationInfo)
     */
    readonly orientationInfo: OrientationInfo;
    /**
     * The parent or the feature object id of the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#parentObjectId)
     */
    parentObjectId: number;
    /**
     * The file size of the attachment. This is specified in bytes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#size)
     */
    size: number;
    /**
     * The URL of the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#url)
     */
    url: string;

    /**
     * Creates a deep clone of the AttachmentInfo class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#clone)
     *
     *
     */
    clone(): AttachmentInfo;
  }

  interface AttachmentInfoConstructor {
    new (properties?: AttachmentInfoProperties): AttachmentInfo;

    fromJSON(json: any): AttachmentInfo;
  }

  export const AttachmentInfo: AttachmentInfoConstructor;

  interface AttachmentInfoProperties {
    /**
     * The content type of the attachment. For example, `'image/jpeg'`.See the [ArcGIS REST API documentation](https://developers.arcgis.com/rest/services-reference/query-attachments-feature-service-layer-.htm)for more information on supported attachment types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#contentType)
     */
    contentType?: string;
    /**
     * An array of [ExifInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#ExifInfo) for the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#exifInfo)
     */
    exifInfo?: ExifInfo[];
    /**
     * The identifier for the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#id)
     */
    id?: number;
    /**
     * Keywords used for the attachments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#keywords)
     */
    keywords?: string;
    /**
     * String value indicating the name of the file attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#name)
     */
    name?: string;
    /**
     * The parent or the feature object id of the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#parentObjectId)
     */
    parentObjectId?: number;
    /**
     * The file size of the attachment. This is specified in bytes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#size)
     */
    size?: number;
    /**
     * The URL of the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#url)
     */
    url?: string;
  }

  /**
   * An array of [Exchangeable image file format](http://www.cipa.jp/std/documents/e/DC-008-Translation-2016-E.pdf) informationfor the attachment. You must set the attachment query's [returnMetadata](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#returnMetadata) to `true` to get the `exif`info associated with the attachment.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#ExifInfo)
   */
  export interface ExifInfo extends Object {
    /**
     * The file name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#ExifInfo)
     */
    name?: string;
    /**
     * Array of tag objects containing the following properties:
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#ExifInfo)
     */
    tags?: ExifInfoTags[];
  }

  /**
   * An object containing properties specific to the orientation of an image attachment.This information is stored within the attachment's [exifInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#exifInfo).In order to read this, you must first set the attachment query's [returnMetadata](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#returnMetadata)to `true` to get the `exif` info associated with the attachment.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#OrientationInfo)
   */
  export interface OrientationInfo extends Object {
    /**
     * The identifer for the orientation info.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#OrientationInfo)
     */
    id?: number;
    /**
     * The rotation value for the attached image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#OrientationInfo)
     */
    rotation?: number;
    /**
     * Indicates whether the image displays mirrored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#OrientationInfo)
     */
    mirrored?: boolean;
  }

  export interface ExifInfoTags extends Object {
    /**
     * The tag name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#ExifInfo)
     */
    name: string;
    /**
     * The tag description.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#ExifInfo)
     */
    description: string;
    /**
     * The value of the tag.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#ExifInfo)
     */
    value: any;
  }

  interface BuildingFilter extends JSONSupport {
    /**
     * Description of the filter for display in UIs, for example when the filter is edited in ArcGIS Pro.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#description)
     */
    description: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#filterBlocks)
     */
    filterBlocks: Collection<BuildingFilterBlock>;
    /**
     * Unique filter id.Assign this id to [BuildingSceneLayer.activeFilterId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#activeFilterId) to activate the filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#id)
     */
    readonly id: string;
    /**
     * Name of the filter for display in UIs, for example when the filter is edited in ArcGIS Pro.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#name)
     */
    name: string;
  }

  interface BuildingFilterConstructor {
    new (properties?: BuildingFilterProperties): BuildingFilter;

    fromJSON(json: any): BuildingFilter;
  }

  export const BuildingFilter: BuildingFilterConstructor;

  interface BuildingFilterProperties {
    /**
     * Description of the filter for display in UIs, for example when the filter is edited in ArcGIS Pro.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#description)
     */
    description?: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#filterBlocks)
     */
    filterBlocks?: CollectionProperties<BuildingFilterBlock>;
    /**
     * Name of the filter for display in UIs, for example when the filter is edited in ArcGIS Pro.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#name)
     */
    name?: string;
  }

  /**
   * Object contained in the [filterBlocks](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#filterBlocks) collection:
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#BuildingFilterBlock)
   */
  export interface BuildingFilterBlock extends Object {
    /**
     * The SQL where clause used to match features to this filter block.                                      Only the features that satisfy the filter expression are displayed in the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).                                      This property is evaluated on the client using the cached attributes and it only supports                                      [standardized SQL](http://doc.arcgis.com/en/arcgis-online/reference/sql-agol.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#BuildingFilterBlock)
     */
    filterExpression: string;
    /**
     * This object contains information about the filter mode of the filter block. This property can generally be omitted, since only `solid` filter blocks are rendered in the JS API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#BuildingFilterBlock)
     */
    filterMode?: BuildingFilterBlockFilterMode;
    /**
     * Title of the filter for display in UIs, for example when the filter block is edited in ArcGIS Pro.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#BuildingFilterBlock)
     */
    title?: string;
  }

  export interface BuildingFilterBlockFilterMode extends Object {
    /**
     * Defines how features are drawn while the filter is active. The same filter mode type can only be used once in a filter.                                             To filter multiple elements as solid, add them to a single filter block instead of creating several filter blocks that use the `solid` filter mode.**Possible Values:** solid | wire-frame
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#BuildingFilterBlock)
     *
     * @default solid
     */
    type?: string;
  }

  interface CodedValueDomain extends Domain {
    /**
     * An array of the coded values in the domain. See the object specification table below for theproperties each item in the array should contain.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-CodedValueDomain.html#codedValues)
     */
    codedValues: CodedValueDomainCodedValues[];
    /**
     * The domain type. This value is always `coded-value`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-CodedValueDomain.html#type)
     */
    readonly type: "coded-value";

    /**
     * Returns the name of the coded-value associated with the specified code.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-CodedValueDomain.html#getName)
     *
     * @param code The code associated with the desired name.
     *
     */
    getName(code: string | number): string;
  }

  interface CodedValueDomainConstructor {
    new (properties?: CodedValueDomainProperties): CodedValueDomain;

    fromJSON(json: any): CodedValueDomain;
  }

  export const CodedValueDomain: CodedValueDomainConstructor;

  interface CodedValueDomainProperties extends DomainProperties {
    /**
     * An array of the coded values in the domain. See the object specification table below for theproperties each item in the array should contain.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-CodedValueDomain.html#codedValues)
     */
    codedValues?: CodedValueDomainCodedValues[];
  }

  export interface CodedValueDomainCodedValues extends Object {
    /**
     * The name of the coded value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-CodedValueDomain.html#codedValues)
     */
    name: string;
    /**
     * The value of the code.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-CodedValueDomain.html#codedValues)
     */
    code: string | number;
  }

  interface DimensionalDefinition extends Accessor, JSONSupport {
    /**
     * The dimension associated with the variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-DimensionalDefinition.html#dimensionName)
     */
    dimensionName: string;
    /**
     * Indicates whether the values indicate slices (rather than ranges).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-DimensionalDefinition.html#isSlice)
     *
     * @default false
     */
    isSlice: boolean;
    /**
     * An array of single values or tuples [min, max] each defining a range ofvalid values along the specified dimension.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-DimensionalDefinition.html#values)
     */
    values: (number | number[])[];
    /**
     * The required variable name by which to filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-DimensionalDefinition.html#variableName)
     */
    variableName: string;

    /**
     * Creates a clone of the DimensionalDefinition object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-DimensionalDefinition.html#clone)
     *
     *
     */
    clone(): DimensionalDefinition;
  }

  interface DimensionalDefinitionConstructor {
    new (properties?: DimensionalDefinitionProperties): DimensionalDefinition;

    fromJSON(json: any): DimensionalDefinition;
  }

  export const DimensionalDefinition: DimensionalDefinitionConstructor;

  interface DimensionalDefinitionProperties {
    /**
     * The dimension associated with the variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-DimensionalDefinition.html#dimensionName)
     */
    dimensionName?: string;
    /**
     * Indicates whether the values indicate slices (rather than ranges).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-DimensionalDefinition.html#isSlice)
     *
     * @default false
     */
    isSlice?: boolean;
    /**
     * An array of single values or tuples [min, max] each defining a range ofvalid values along the specified dimension.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-DimensionalDefinition.html#values)
     */
    values?: (number | number[])[];
    /**
     * The required variable name by which to filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-DimensionalDefinition.html#variableName)
     */
    variableName?: string;
  }

  interface Domain extends Accessor, JSONSupport {
    /**
     * The domain name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Domain.html#name)
     */
    name: string;
    /**
     * The domain type.**Possible Values:** range | coded-value | inherited
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Domain.html#type)
     */
    type: "range" | "coded-value" | "inherited";
  }

  interface DomainConstructor {
    new (properties?: DomainProperties): Domain;

    fromJSON(json: any): Domain;
  }

  export const Domain: DomainConstructor;

  interface DomainProperties {
    /**
     * The domain name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Domain.html#name)
     */
    name?: string;
    /**
     * The domain type.**Possible Values:** range | coded-value | inherited
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Domain.html#type)
     */
    type?: "range" | "coded-value" | "inherited";
  }

  interface ElevationSampler {
    /**
     * Registers an event handler on the instance. Call this method to hook anevent with a listener. See the [Events summary table](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ElevationSampler.html#events-summary) for a listof listened events.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ElevationSampler.html#on)
     *
     * @param type The name of the event or the events to listen for.
     * @param handler? The function to call when the event is fired, if modifiers were specified.
     *
     */
    on(type: string | string[], handler?: Function): any;
    /**
     * Query elevation for a [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html), [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) or[Multipoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html) geometry. A query will return a new geometryfor which the z-values for each coordinate in the geometry are obtained from the elevationsampler. If the geometry used for the query is outside of the elevation sampler extent,then the returned geometry has `0` as z-values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ElevationSampler.html#queryElevation)
     *
     * @param geometry The geometry to use for sampling elevation data.
     *
     */
    queryElevation(geometry: Point | Multipoint | Polyline): Point | Multipoint | Polyline;

    on(name: "changed", eventHandler: ElevationSamplerChangedEventHandler): IHandle;
  }

  interface ElevationSamplerConstructor {
    new (): ElevationSampler;
  }

  export const ElevationSampler: ElevationSamplerConstructor;

  export interface ElevationSamplerChangedEvent {}

  interface FeatureTemplate extends Accessor, JSONSupport {
    /**
     * Description of the feature template.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#description)
     */
    description: string;
    /**
     * Name of the default drawing tool defined for the template to create a feature.**Possible Values:** auto-complete-polygon | circle | ellipse | freehand | line | none | point | polygon | rectangle | arrow | triangle | left-arrow | right-arrow | up-arrow | down-arrow
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#drawingTool)
     */
    drawingTool: string;
    /**
     * Name of the feature template.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#name)
     */
    name: string;
    /**
     * An instance of the prototypical feature described by the [feature template](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html).It specifies default values for the attribute fields and does not contain geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#prototype)
     */
    prototype: any;
    /**
     * An object used to create a thumbnail image that represents a feature type in the feature template.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#thumbnail)
     */
    thumbnail: FeatureTemplateThumbnail;
  }

  interface FeatureTemplateConstructor {
    new (properties?: FeatureTemplateProperties): FeatureTemplate;

    fromJSON(json: any): FeatureTemplate;
  }

  export const FeatureTemplate: FeatureTemplateConstructor;

  interface FeatureTemplateProperties {
    /**
     * Description of the feature template.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#description)
     */
    description?: string;
    /**
     * Name of the default drawing tool defined for the template to create a feature.**Possible Values:** auto-complete-polygon | circle | ellipse | freehand | line | none | point | polygon | rectangle | arrow | triangle | left-arrow | right-arrow | up-arrow | down-arrow
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#drawingTool)
     */
    drawingTool?: string;
    /**
     * Name of the feature template.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#name)
     */
    name?: string;
    /**
     * An instance of the prototypical feature described by the [feature template](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html).It specifies default values for the attribute fields and does not contain geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#prototype)
     */
    prototype?: any;
    /**
     * An object used to create a thumbnail image that represents a feature type in the feature template.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#thumbnail)
     */
    thumbnail?: FeatureTemplateThumbnail;
  }

  export interface FeatureTemplateThumbnail extends Object {
    /**
     * The MIME type of the image.**Possible Values:** image | png | jpg | jpeg
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#thumbnail)
     */
    contentType: any;
    /**
     * The [base64EncodedImageData](https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding)presenting the thumbnail image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#thumbnail)
     */
    imageData: string;
    /**
     * The height of the thumbnail.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#thumbnail)
     */
    height: number;
    /**
     * The width of the thumbnail.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#thumbnail)
     */
    width: number;
  }

  interface FeatureType extends Accessor, JSONSupport {
    /**
     * Domains associated with the feature type. It is an object where the name of each property corresponds with the name of a fieldcontaining a domain. If a field's domain is an instance of [InheritedDomain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-InheritedDomain.html), the applicationwill use the domain defined for the field from the layer. If the domain is an instance of[CodedValueDomain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-CodedValueDomain.html) or [RangeDomain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RangeDomain.html) then the domain is definedspecifically for the given feature type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureType.html#domains)
     */
    domains: any;
    /**
     * The feature type identifier.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureType.html#id)
     */
    id: number | string;
    /**
     * The feature type name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureType.html#name)
     */
    name: string;
    /**
     * Array of [feature templates](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html) associated with the feature type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureType.html#templates)
     */
    templates: FeatureTemplate[];
  }

  interface FeatureTypeConstructor {
    new (properties?: FeatureTypeProperties): FeatureType;

    fromJSON(json: any): FeatureType;
  }

  export const FeatureType: FeatureTypeConstructor;

  interface FeatureTypeProperties {
    /**
     * Domains associated with the feature type. It is an object where the name of each property corresponds with the name of a fieldcontaining a domain. If a field's domain is an instance of [InheritedDomain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-InheritedDomain.html), the applicationwill use the domain defined for the field from the layer. If the domain is an instance of[CodedValueDomain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-CodedValueDomain.html) or [RangeDomain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RangeDomain.html) then the domain is definedspecifically for the given feature type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureType.html#domains)
     */
    domains?: any;
    /**
     * The feature type identifier.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureType.html#id)
     */
    id?: number | string;
    /**
     * The feature type name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureType.html#name)
     */
    name?: string;
    /**
     * Array of [feature templates](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html) associated with the feature type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureType.html#templates)
     */
    templates?: FeatureTemplateProperties[];
  }

  interface Field extends Accessor, JSONSupport {
    /**
     * The display name for the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#alias)
     *
     * @default null
     */
    alias: string;
    /**
     * The default value set for the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#defaultValue)
     *
     * @default undefined
     */
    defaultValue: number | string | any | any;
    /**
     * Contains information describing the purpose of each field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#description)
     */
    description: string;
    /**
     * The domain associated with the field. Domains are used to constrain the values allowedin a field. There are two types of domains: [RangeDomain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RangeDomain.html)and [CodedValueDomain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-CodedValueDomain.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#domain)
     *
     * @default null
     */
    domain: Domain;
    /**
     * Indicates whether the field is editable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#editable)
     *
     * @default true
     */
    editable: boolean;
    /**
     * The field length.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#length)
     *
     * @default -1
     */
    length: number;
    /**
     * The name of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#name)
     *
     * @default null
     */
    name: string;
    /**
     * Indicates if the field can accept `null` values. *Requires ArcGIS Server version 10.1 or greater.*
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#nullable)
     *
     * @default true
     */
    nullable: boolean;
    /**
     * The data type of the field.**Possible Values:** small-integer | integer | single | double |long | string | date | oid | geometry | blob | raster |guid | global-id | xml
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#type)
     *
     * @default null
     */
    type:
      | "small-integer"
      | "integer"
      | "single"
      | "double"
      | "long"
      | "string"
      | "date"
      | "oid"
      | "geometry"
      | "blob"
      | "raster"
      | "guid"
      | "global-id"
      | "xml";
    /**
     * The types of values that can be assigned to a field. See the table below for a list of possible values.| Mode | Description || ------|------------ || name-or-title | Text that represents a name, title, label, or keyword for each feature. || description | Text that provides a longer description of the feature, more than just a name or title. || type-or-category | Types or categories that group features based on common characteristics. || count-or-amount | Integers (no decimal) that represent how many or how much there is of a specific attribute. || percentage-or-ratio | Number values in this field reflect the relationship between different quantities. || measurement | A number that reflects a characteristic that you can precisely measure. || unique-identifier | The values in this field are used to positively distinguish one feature or entity from another. || ordered-or-ranked | The values in this field represent a feature's status in an ordered or ranked list. For example, a feature could be one of the following: `Small, medium, large`, `First, second, third, fourth`, or `Informational, warning, error, failure`.|| binary | Only one of two values are possible for each feature. Some examples include the following: `On or off`, `Yes or no`, `True or false`, or `Inhabited or vacant`. || location-or-place-name | Values in this field represent a geographic location. Examples of values in such a field include a street address, city name, region, building name (such as A.K. Smiley Public Library), attraction name (such as Alameda County Fairgrounds or Cairngorms National Park), postal code, or country. || coordinate | These fields store a geographic coordinate value such as x, y, z, latitude, or longitude. || date-and-time | Values in this field store explicit dates and times or date references such as days of the week, months, or years. || none | No specified type. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#valueType)
     */
    valueType:
      | "binary"
      | "coordinate"
      | "count-or-amount"
      | "date-and-time"
      | "description"
      | "location-or-place-name"
      | "measurement"
      | "name-or-title"
      | "none"
      | "ordered-or-ranked"
      | "percentage-or-ratio"
      | "type-or-category"
      | "unique-identifier";
  }

  interface FieldConstructor {
    new (properties?: FieldProperties): Field;

    fromJSON(json: any): Field;
  }

  export const Field: FieldConstructor;

  interface FieldProperties {
    /**
     * The display name for the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#alias)
     *
     * @default null
     */
    alias?: string;
    /**
     * The default value set for the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#defaultValue)
     *
     * @default undefined
     */
    defaultValue?: number | string | any | any;
    /**
     * Contains information describing the purpose of each field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#description)
     */
    description?: string;
    /**
     * The domain associated with the field. Domains are used to constrain the values allowedin a field. There are two types of domains: [RangeDomain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RangeDomain.html)and [CodedValueDomain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-CodedValueDomain.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#domain)
     *
     * @default null
     */
    domain?: DomainProperties;
    /**
     * Indicates whether the field is editable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#editable)
     *
     * @default true
     */
    editable?: boolean;
    /**
     * The field length.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#length)
     *
     * @default -1
     */
    length?: number;
    /**
     * The name of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#name)
     *
     * @default null
     */
    name?: string;
    /**
     * Indicates if the field can accept `null` values. *Requires ArcGIS Server version 10.1 or greater.*
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#nullable)
     *
     * @default true
     */
    nullable?: boolean;
    /**
     * The data type of the field.**Possible Values:** small-integer | integer | single | double |long | string | date | oid | geometry | blob | raster |guid | global-id | xml
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#type)
     *
     * @default null
     */
    type?:
      | "small-integer"
      | "integer"
      | "single"
      | "double"
      | "long"
      | "string"
      | "date"
      | "oid"
      | "geometry"
      | "blob"
      | "raster"
      | "guid"
      | "global-id"
      | "xml";
    /**
     * The types of values that can be assigned to a field. See the table below for a list of possible values.| Mode | Description || ------|------------ || name-or-title | Text that represents a name, title, label, or keyword for each feature. || description | Text that provides a longer description of the feature, more than just a name or title. || type-or-category | Types or categories that group features based on common characteristics. || count-or-amount | Integers (no decimal) that represent how many or how much there is of a specific attribute. || percentage-or-ratio | Number values in this field reflect the relationship between different quantities. || measurement | A number that reflects a characteristic that you can precisely measure. || unique-identifier | The values in this field are used to positively distinguish one feature or entity from another. || ordered-or-ranked | The values in this field represent a feature's status in an ordered or ranked list. For example, a feature could be one of the following: `Small, medium, large`, `First, second, third, fourth`, or `Informational, warning, error, failure`.|| binary | Only one of two values are possible for each feature. Some examples include the following: `On or off`, `Yes or no`, `True or false`, or `Inhabited or vacant`. || location-or-place-name | Values in this field represent a geographic location. Examples of values in such a field include a street address, city name, region, building name (such as A.K. Smiley Public Library), attraction name (such as Alameda County Fairgrounds or Cairngorms National Park), postal code, or country. || coordinate | These fields store a geographic coordinate value such as x, y, z, latitude, or longitude. || date-and-time | Values in this field store explicit dates and times or date references such as days of the week, months, or years. || none | No specified type. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#valueType)
     */
    valueType?:
      | "binary"
      | "coordinate"
      | "count-or-amount"
      | "date-and-time"
      | "description"
      | "location-or-place-name"
      | "measurement"
      | "name-or-title"
      | "none"
      | "ordered-or-ranked"
      | "percentage-or-ratio"
      | "type-or-category"
      | "unique-identifier";
  }

  interface FieldsIndex {
    /**
     * An array of date fields or field json objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FieldsIndex.html#dateFields)
     *
     * @default []
     */
    dateFields: Field[] | any[];

    /**
     * Returns a field with the specified field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FieldsIndex.html#get)
     *
     * @param fieldName The name of the field. The name is case-insensitive.
     *
     */
    get(fieldName: string): Field;
    /**
     * Checks if a field with the specified field name exists in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FieldsIndex.html#has)
     *
     * @param fieldName The name of the field. The name is case-insensitive.
     *
     */
    has(fieldName: string): boolean;
    /**
     * Checks if a field with the specified field name is a date field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FieldsIndex.html#isDateField)
     *
     * @param fieldName The name of the field.
     *
     */
    isDateField(fieldName: string): boolean;
  }

  interface FieldsIndexConstructor {
    new (properties?: any): FieldsIndex;
  }

  export const FieldsIndex: FieldsIndexConstructor;

  interface fieldUtils {
    /**
     * Returns an array of field names used in the Arcade expression for calculating the Z values of featuresin the given feature layer's [FeatureLayer.elevationInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#elevationInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-fieldUtils.html#getElevationFields)
     *
     * @param layer The featureLayer to extract fields required for calculating feature Z values.
     *
     */
    getElevationFields(layer: FeatureLayer): IPromise<string[]>;
    /**
     * Returns an array of editor tracking field names for a given feature layer.It includes the fields from the [FeatureLayer.editFieldsInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#editFieldsInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-fieldUtils.html#getFeatureEditFields)
     *
     * @param layer The Feature Layer from which to extract editor tracking fields.
     *
     */
    getFeatureEditFields(layer: FeatureLayer): string[];
    /**
     * Returns an array of field names used in the Arcade expression for labeling featuresin the given feature layer's [FeatureLayer.labelingInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#labelingInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-fieldUtils.html#getLabelingFields)
     *
     * @param layer The Feature Layer from which to extract label fields.
     *
     */
    getLabelingFields(layer: FeatureLayer): IPromise<string[]>;
    /**
     * Returns an array of field names related to time.It includes the fields from the [FeatureLayer.timeInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#timeInfo),and the `trackIdField`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-fieldUtils.html#getTimeFields)
     *
     * @param layer The Feature Layer from which to extract time fields.
     *
     */
    getTimeFields(layer: FeatureLayer): IPromise<string[]>;
  }

  export const fieldUtils: fieldUtils;

  interface ImageParameters extends Accessor {
    /**
     * Dots per inch setting for an module:esri/layersMapImageLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#dpi)
     *
     * @default 96
     */
    dpi: number;
    /**
     * Extent of map to be exported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#extent)
     */
    extent: Extent;
    /**
     * Map image format.**Possible Values:** png | png8 | png24 | png32 | jpg | pdf | bmp | gif | svg
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#format)
     *
     * @default png8
     */
    format: string;
    /**
     * Requested image height in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#height)
     */
    height: number;
    /**
     * Spatial reference of exported map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#imageSpatialReference)
     */
    imageSpatialReference: SpatialReference;
    /**
     * Array of layer definition expressions that allows you to filter the features of individuallayers in the exported map image. Layer definitions with semicolons or colons are supported ifusing a map service published using ArcGIS Server 10 or later.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#layerDefinitions)
     */
    layerDefinitions: string[];
    /**
     * A list of layer IDs, that represent which layers to include in the exported map. Usein combination with [layerOption](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#layerOption) to specify how layer visibility is handled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#layerIds)
     */
    layerIds: number[];
    /**
     * The option for displaying or hiding the layer.**Possible Values:** show | hide | include | exclude
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#layerOption)
     */
    layerOption: string;
    /**
     * Indicates whether or not the background of the dynamic image is transparent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#transparent)
     *
     * @default true
     */
    transparent: boolean;
    /**
     * Requested image width in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#width)
     */
    width: number;

    /**
     * Converts an instance of  [this class]() to its ArcGIS portal JSON representation.See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html) topic in the Guide for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#toJSON)
     *
     *
     */
    toJSON(): any;
  }

  interface ImageParametersConstructor {
    new (properties?: ImageParametersProperties): ImageParameters;
  }

  export const ImageParameters: ImageParametersConstructor;

  interface ImageParametersProperties {
    /**
     * Dots per inch setting for an module:esri/layersMapImageLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#dpi)
     *
     * @default 96
     */
    dpi?: number;
    /**
     * Extent of map to be exported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#extent)
     */
    extent?: ExtentProperties;
    /**
     * Map image format.**Possible Values:** png | png8 | png24 | png32 | jpg | pdf | bmp | gif | svg
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#format)
     *
     * @default png8
     */
    format?: string;
    /**
     * Requested image height in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#height)
     */
    height?: number;
    /**
     * Spatial reference of exported map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#imageSpatialReference)
     */
    imageSpatialReference?: SpatialReferenceProperties;
    /**
     * Array of layer definition expressions that allows you to filter the features of individuallayers in the exported map image. Layer definitions with semicolons or colons are supported ifusing a map service published using ArcGIS Server 10 or later.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#layerDefinitions)
     */
    layerDefinitions?: string[];
    /**
     * A list of layer IDs, that represent which layers to include in the exported map. Usein combination with [layerOption](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#layerOption) to specify how layer visibility is handled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#layerIds)
     */
    layerIds?: number[];
    /**
     * The option for displaying or hiding the layer.**Possible Values:** show | hide | include | exclude
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#layerOption)
     */
    layerOption?: string;
    /**
     * Indicates whether or not the background of the dynamic image is transparent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#transparent)
     *
     * @default true
     */
    transparent?: boolean;
    /**
     * Requested image width in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#width)
     */
    width?: number;
  }

  interface InheritedDomain extends Domain {
    /**
     * The domain type. This value is always `inherited`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-InheritedDomain.html#type)
     */
    readonly type: "inherited";
  }

  interface InheritedDomainConstructor {
    new (properties?: InheritedDomainProperties): InheritedDomain;

    fromJSON(json: any): InheritedDomain;
  }

  export const InheritedDomain: InheritedDomainConstructor;

  interface InheritedDomainProperties extends DomainProperties {}

  interface KMLSublayer extends Accessor, JSONSupport {
    /**
     * Description for the KML sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html#description)
     */
    description: string;
    /**
     * The id for the KML sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html#id)
     */
    id: number;
    /**
     * The [KMLLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-KMLLayer.html) to which the sublayer belongs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html#layer)
     */
    layer: KMLLayer;
    /**
     * Network link info for the current layer. A link info object with properties that describe the network link.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html#networkLink)
     */
    networkLink: any;
    /**
     * A collection of [KMLSublayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html#sublayers)
     */
    sublayers: Collection<KMLSublayer>;
    /**
     * The title of the KML sublayer used to identify it in places such as the[LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) and [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widgets.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html#title)
     */
    title: string;
    /**
     * Indicates if the sublayer is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html#visible)
     */
    visible: boolean;
  }

  interface KMLSublayerConstructor {
    new (properties?: KMLSublayerProperties): KMLSublayer;

    fromJSON(json: any): KMLSublayer;
  }

  export const KMLSublayer: KMLSublayerConstructor;

  interface KMLSublayerProperties {
    /**
     * Description for the KML sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html#description)
     */
    description?: string;
    /**
     * The id for the KML sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html#id)
     */
    id?: number;
    /**
     * The [KMLLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-KMLLayer.html) to which the sublayer belongs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html#layer)
     */
    layer?: KMLLayerProperties;
    /**
     * Network link info for the current layer. A link info object with properties that describe the network link.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html#networkLink)
     */
    networkLink?: any;
    /**
     * A collection of [KMLSublayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html#sublayers)
     */
    sublayers?: CollectionProperties<KMLSublayerProperties>;
    /**
     * The title of the KML sublayer used to identify it in places such as the[LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) and [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widgets.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html#title)
     */
    title?: string;
    /**
     * Indicates if the sublayer is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html#visible)
     */
    visible?: boolean;
  }

  interface LabelClass extends Accessor, JSONSupport {
    /**
     * Defines the content of label text for [MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html).If working with [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html), use[labelExpressionInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelExpressionInfo) instead.Attribute values may be included in labels using SQL syntax. To include anattribute value in a label, wrap the name of the field in square brackets `[]`.See the example snippet below.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelExpression)
     *
     * @default null
     */
    labelExpression: string;
    /**
     * Defines the content of label text for [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html).If working with [MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html), use[labelExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelExpression) instead.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelExpressionInfo)
     *
     * @default null
     */
    labelExpressionInfo: LabelClassLabelExpressionInfo;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelPlacement)
     *
     * @default null
     */
    labelPlacement: string;
    /**
     * The maximum scale (most zoomed in) at which labels are visible in the view.A value of `0` means the label's visibility does not have a maximum scale.The maxScale value should always be smaller than the [minScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#minScale) value,and greater than or equal to the service specification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#maxScale)
     *
     * @default 0
     */
    maxScale: number;
    /**
     * The minimum scale (most zoomed out) at which labels are visible in the view.A value of `0` means the label's visibility does not have a minimum scale.The minScale value should always be larger than the [maxScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#maxScale) value,and lesser than or equal to the service specification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#minScale)
     *
     * @default 0
     */
    minScale: number;
    /**
     * Defines the symbol used for rendering the label. If not set, the default symbol will be used. See the examplebelow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#symbol)
     */
    symbol: TextSymbol | LabelSymbol3D;
    /**
     * Indicates whether to use domain names if the fields in the [labelExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelExpression)or [labelExpressionInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelExpressionInfo) have domains.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#useCodedValues)
     */
    useCodedValues: boolean;
    /**
     * A SQL where clause used to determine the features to which the label class should be applied.When specified, only features evaluating to `true` based on this expression will be labeled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#where)
     *
     * @default null
     */
    where: string;

    /**
     * Creates a deep clone of the LabelClass.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#clone)
     *
     *
     */
    clone(): LabelClass;
  }

  interface LabelClassConstructor {
    new (properties?: LabelClassProperties): LabelClass;

    fromJSON(json: any): LabelClass;
  }

  export const LabelClass: LabelClassConstructor;

  interface LabelClassProperties {
    /**
     * Defines the content of label text for [MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html).If working with [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html), use[labelExpressionInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelExpressionInfo) instead.Attribute values may be included in labels using SQL syntax. To include anattribute value in a label, wrap the name of the field in square brackets `[]`.See the example snippet below.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelExpression)
     *
     * @default null
     */
    labelExpression?: string;
    /**
     * Defines the content of label text for [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html).If working with [MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html), use[labelExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelExpression) instead.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelExpressionInfo)
     *
     * @default null
     */
    labelExpressionInfo?: LabelClassLabelExpressionInfo;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelPlacement)
     *
     * @default null
     */
    labelPlacement?: string;
    /**
     * The maximum scale (most zoomed in) at which labels are visible in the view.A value of `0` means the label's visibility does not have a maximum scale.The maxScale value should always be smaller than the [minScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#minScale) value,and greater than or equal to the service specification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#maxScale)
     *
     * @default 0
     */
    maxScale?: number;
    /**
     * The minimum scale (most zoomed out) at which labels are visible in the view.A value of `0` means the label's visibility does not have a minimum scale.The minScale value should always be larger than the [maxScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#maxScale) value,and lesser than or equal to the service specification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#minScale)
     *
     * @default 0
     */
    minScale?: number;
    /**
     * Defines the symbol used for rendering the label. If not set, the default symbol will be used. See the examplebelow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#symbol)
     */
    symbol?: TextSymbolProperties | LabelSymbol3DProperties;
    /**
     * Indicates whether to use domain names if the fields in the [labelExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelExpression)or [labelExpressionInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelExpressionInfo) have domains.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#useCodedValues)
     */
    useCodedValues?: boolean;
    /**
     * A SQL where clause used to determine the features to which the label class should be applied.When specified, only features evaluating to `true` based on this expression will be labeled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#where)
     *
     * @default null
     */
    where?: string;
  }

  export interface LabelClassLabelExpressionInfo extends Object {
    /**
     * The SQL expression defining the content of the label text.**Deprecated as of v4.5. Use `expression` instead.**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelExpressionInfo)
     */
    value?: string;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html)expression that evaluates to a string used to label features in the layer.The most simple expressions return field values. For example, to label a layerof cities with their names, simply reference the field value with the globalvariable: `$feature.CITY_NAME`. Expressions can be more sophisticated and uselogical functions. This may be useful if you want to use classed labels.For example, the following expression appends `city` to the end of the labelif the feature's population field contains a number greater than 10,000. Otherwise,`town` is appended to the end of the label. Additionally, you can use `TextFormatting.NewLine`to add a new line to the label.`IIF($feature.POPULATION > 10000, $feature.NAME + ' city', $feature.NAME + ' town')`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelExpressionInfo)
     */
    expression: string;
  }

  interface LOD extends Accessor, JSONSupport {
    /**
     * ID for each level. The top most level is `0`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LOD.html#level)
     */
    level: number;
    /**
     * String to be used when constructing a URL to access a tile from this LOD. If `levelValue` is not defined,level will be used for the tile access URL. This property is useful when an LOD object represents aWMTS TileMatrix with non-numeric matrix identifiers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LOD.html#levelValue)
     */
    levelValue: string;
    /**
     * Resolution in map units of each pixel in a tile for each level.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LOD.html#resolution)
     */
    resolution: number;
    /**
     * Scale for each level.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LOD.html#scale)
     */
    scale: number;
  }

  interface LODConstructor {
    new (properties?: LODProperties): LOD;

    fromJSON(json: any): LOD;
  }

  export const LOD: LODConstructor;

  interface LODProperties {
    /**
     * ID for each level. The top most level is `0`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LOD.html#level)
     */
    level?: number;
    /**
     * String to be used when constructing a URL to access a tile from this LOD. If `levelValue` is not defined,level will be used for the tile access URL. This property is useful when an LOD object represents aWMTS TileMatrix with non-numeric matrix identifiers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LOD.html#levelValue)
     */
    levelValue?: string;
    /**
     * Resolution in map units of each pixel in a tile for each level.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LOD.html#resolution)
     */
    resolution?: number;
    /**
     * Scale for each level.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LOD.html#scale)
     */
    scale?: number;
  }

  interface MapImage extends Accessor, JSONSupport {
    /**
     * The extent of the exported map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MapImage.html#extent)
     */
    extent: Extent;
    /**
     * The requested image height in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MapImage.html#height)
     */
    height: number;
    /**
     * URL to the returned image. The image format must be of a type supported by the HTML `<img>` tag.**Possible Values:** gif | jpg | png | bmp
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MapImage.html#href)
     */
    href: string;
    /**
     * The opacity of the image. Value can be any number between `0` and `1` where `0`is 100% transparent, `0.5` is 50% transparent and `1` is fully opaque.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MapImage.html#opacity)
     *
     * @default 1
     */
    opacity: number;
    /**
     * Scale of the requested dynamic map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MapImage.html#scale)
     */
    scale: number;
    /**
     * Indicates if the requested image is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MapImage.html#visible)
     *
     * @default true
     */
    visible: boolean;
    /**
     * The requested image width in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MapImage.html#width)
     */
    width: number;
  }

  interface MapImageConstructor {
    new (properties?: MapImageProperties): MapImage;

    fromJSON(json: any): MapImage;
  }

  export const MapImage: MapImageConstructor;

  interface MapImageProperties {
    /**
     * The extent of the exported map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MapImage.html#extent)
     */
    extent?: ExtentProperties;
    /**
     * The requested image height in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MapImage.html#height)
     */
    height?: number;
    /**
     * URL to the returned image. The image format must be of a type supported by the HTML `<img>` tag.**Possible Values:** gif | jpg | png | bmp
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MapImage.html#href)
     */
    href?: string;
    /**
     * The opacity of the image. Value can be any number between `0` and `1` where `0`is 100% transparent, `0.5` is 50% transparent and `1` is fully opaque.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MapImage.html#opacity)
     *
     * @default 1
     */
    opacity?: number;
    /**
     * Scale of the requested dynamic map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MapImage.html#scale)
     */
    scale?: number;
    /**
     * Indicates if the requested image is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MapImage.html#visible)
     *
     * @default true
     */
    visible?: boolean;
    /**
     * The requested image width in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MapImage.html#width)
     */
    width?: number;
  }

  interface MosaicRule extends Accessor, JSONSupport {
    /**
     * Indicates whether the sort should be ascending. This property applies to all mosaic[methods](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#method) where an ordering is defined except `seamline`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#ascending)
     *
     * @default true
     */
    ascending: boolean;
    /**
     * The rendering rule applied on items before mosaicking.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#itemRenderingRule)
     */
    itemRenderingRule: RasterFunction;
    /**
     * An array of raster Ids. All the rasters with the given list of raster Ids areselected to participate in the mosaic. The rasters will be visible at all pixelsizes regardless of the minimum and maximum pixel size range of the locked rasters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#lockRasterIds)
     */
    lockRasterIds: number[];
    /**
     * The mosaic method determines how the selected rasters are ordered.The mosaic method defines how the mosaicked image is created from these input rasters.**Possible Values:**Value | Description |----- | ----------- |none | Orders rasters based on the order of [objectIds](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#objectIds) in the mosaic dataset attribute table.center | Enables rasters to be sorted based their ZOrder, then PixelSize, and then by a default order where rasters that have their centers closest to the view center are placed on top.nadir | Enables rasters to be sorted by the ZOrder, then PixelSize, and then by the distance between the nadir position and view center. This is similar to the Closest to Center method but uses the nadir point to a raster, which may be different than the center, especially for oblique imagery.viewpoint | Orders rasters based on the ZOrder, then PixelSize, and then by a user-defined location and nadir location for the rasters using the [viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#viewpoint).attribute | Enables raster ordering based on ZOrder, then PixelSize, and then by a defined metadata attribute and its difference from a base value.lock-raster | Enables a user to lock the display of single or multiple rasters based on the [lockRasterIds](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#lockRasterIds).northwest | Enables raster ordering by ZOrder, then PixelSize, and then by the shortest distance between the center of a raster to the northwest position.seamline| Cuts the raster using the predefined seamline shape for each raster, using optional feathering along the seams, and orders images based on the ZOrder and then the SOrder fields in the attribute table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#method)
     */
    method: string;
    /**
     * A multiple dimensional service can have multiple dimensions for one or more variables.Use multiDimensionalDefinitions to filter data based on a slice or rangeof data. For example, a single ImageryLayer may have a `depth` dimension storingsea temperatures for the same pixel location at various depths. Another dimensioncould be `time`, where the same pixel stores multiple values based on a windowof time.This property can be used to filter and display ImageryLayer pixels for specific"slices" in those dimensions (e.g. display sea temperature at 1000m below sea levelfor a specific week in the year).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#multidimensionalDefinition)
     */
    multidimensionalDefinition: DimensionalDefinition[];
    /**
     * Defines a selection using a set of ObjectIDs. This property applies to all mosaic methods.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#objectIds)
     */
    objectIds: number[];
    /**
     * Defines the mosaic operation used to resolve overlapping pixels.**Possible Values:**Value | Description |----- | ----------- |first | The overlapping areas will contain the cells from the first raster dataset listed in the source.last | The overlapping areas will contain the cells from the last raster dataset listed in the source.min | The overlapping areas will contain the minimum cell values from all the overlapping cells.max | The overlapping areas will contain the maximum cell values from all the overlapping cells.mean | The overlapping areas will contain the mean cell values from all the overlapping cells.blend | The overlapping areas will be a blend of the cell values that overlap. This blend value relies on an algorithm that is weight based and dependent on the distance from the cells to the edge within the overlapping area.sum | The overlapping areas will contain the total sum of the cell values from all the overlapping cells.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#operation)
     */
    operation: string;
    /**
     * The name of the attribute field that is used with a constant sortValue to define the mosaickingorder when the mosaic [method](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#method) is set to `attribute`. The ordering is definedby the absolute value of the difference between the specified sort field value and the sort basevalue. For example, if the sort field is `Month` and the sort value is `7 (July)`, then the orderingis defined by `ABS(Month -7)`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#sortField)
     */
    sortField: string;
    /**
     * A constant value defining a reference or base value for the sort field when the mosaic [method](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#method)is set to `attribute`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#sortValue)
     */
    sortValue: string;
    /**
     * Defines the viewpoint location on which the ordering is defined based on thedistance from the viewpoint and the nadir of rasters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#viewpoint)
     */
    viewpoint: Point;
    /**
     * The where clause determines which rasters will participate in the mosaic.This property applies to all mosaic methods.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#where)
     */
    where: string;

    /**
     * Creates a clone of the MosaicRule object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#clone)
     *
     *
     */
    clone(): MosaicRule;
  }

  interface MosaicRuleConstructor {
    new (properties?: MosaicRuleProperties): MosaicRule;

    fromJSON(json: any): MosaicRule;
  }

  export const MosaicRule: MosaicRuleConstructor;

  interface MosaicRuleProperties {
    /**
     * Indicates whether the sort should be ascending. This property applies to all mosaic[methods](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#method) where an ordering is defined except `seamline`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#ascending)
     *
     * @default true
     */
    ascending?: boolean;
    /**
     * The rendering rule applied on items before mosaicking.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#itemRenderingRule)
     */
    itemRenderingRule?: RasterFunctionProperties;
    /**
     * An array of raster Ids. All the rasters with the given list of raster Ids areselected to participate in the mosaic. The rasters will be visible at all pixelsizes regardless of the minimum and maximum pixel size range of the locked rasters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#lockRasterIds)
     */
    lockRasterIds?: number[];
    /**
     * The mosaic method determines how the selected rasters are ordered.The mosaic method defines how the mosaicked image is created from these input rasters.**Possible Values:**Value | Description |----- | ----------- |none | Orders rasters based on the order of [objectIds](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#objectIds) in the mosaic dataset attribute table.center | Enables rasters to be sorted based their ZOrder, then PixelSize, and then by a default order where rasters that have their centers closest to the view center are placed on top.nadir | Enables rasters to be sorted by the ZOrder, then PixelSize, and then by the distance between the nadir position and view center. This is similar to the Closest to Center method but uses the nadir point to a raster, which may be different than the center, especially for oblique imagery.viewpoint | Orders rasters based on the ZOrder, then PixelSize, and then by a user-defined location and nadir location for the rasters using the [viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#viewpoint).attribute | Enables raster ordering based on ZOrder, then PixelSize, and then by a defined metadata attribute and its difference from a base value.lock-raster | Enables a user to lock the display of single or multiple rasters based on the [lockRasterIds](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#lockRasterIds).northwest | Enables raster ordering by ZOrder, then PixelSize, and then by the shortest distance between the center of a raster to the northwest position.seamline| Cuts the raster using the predefined seamline shape for each raster, using optional feathering along the seams, and orders images based on the ZOrder and then the SOrder fields in the attribute table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#method)
     */
    method?: string;
    /**
     * A multiple dimensional service can have multiple dimensions for one or more variables.Use multiDimensionalDefinitions to filter data based on a slice or rangeof data. For example, a single ImageryLayer may have a `depth` dimension storingsea temperatures for the same pixel location at various depths. Another dimensioncould be `time`, where the same pixel stores multiple values based on a windowof time.This property can be used to filter and display ImageryLayer pixels for specific"slices" in those dimensions (e.g. display sea temperature at 1000m below sea levelfor a specific week in the year).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#multidimensionalDefinition)
     */
    multidimensionalDefinition?: DimensionalDefinitionProperties[];
    /**
     * Defines a selection using a set of ObjectIDs. This property applies to all mosaic methods.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#objectIds)
     */
    objectIds?: number[];
    /**
     * Defines the mosaic operation used to resolve overlapping pixels.**Possible Values:**Value | Description |----- | ----------- |first | The overlapping areas will contain the cells from the first raster dataset listed in the source.last | The overlapping areas will contain the cells from the last raster dataset listed in the source.min | The overlapping areas will contain the minimum cell values from all the overlapping cells.max | The overlapping areas will contain the maximum cell values from all the overlapping cells.mean | The overlapping areas will contain the mean cell values from all the overlapping cells.blend | The overlapping areas will be a blend of the cell values that overlap. This blend value relies on an algorithm that is weight based and dependent on the distance from the cells to the edge within the overlapping area.sum | The overlapping areas will contain the total sum of the cell values from all the overlapping cells.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#operation)
     */
    operation?: string;
    /**
     * The name of the attribute field that is used with a constant sortValue to define the mosaickingorder when the mosaic [method](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#method) is set to `attribute`. The ordering is definedby the absolute value of the difference between the specified sort field value and the sort basevalue. For example, if the sort field is `Month` and the sort value is `7 (July)`, then the orderingis defined by `ABS(Month -7)`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#sortField)
     */
    sortField?: string;
    /**
     * A constant value defining a reference or base value for the sort field when the mosaic [method](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#method)is set to `attribute`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#sortValue)
     */
    sortValue?: string;
    /**
     * Defines the viewpoint location on which the ordering is defined based on thedistance from the viewpoint and the nadir of rasters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#viewpoint)
     */
    viewpoint?: PointProperties;
    /**
     * The where clause determines which rasters will participate in the mosaic.This property applies to all mosaic methods.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#where)
     */
    where?: string;
  }

  interface PixelBlock extends Accessor {
    /**
     * The height (or number of rows) of the PixelBlock in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#height)
     */
    height: number;
    /**
     * Bit Mask. All pixels are valid when mask is null.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#mask)
     */
    mask: number[] | Uint8Array;
    /**
     * Indicates whether mask should be used as alpha values. If no (default), a pixel is valid when corresponding mask value is truthy
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#maskIsAlpha)
     */
    maskIsAlpha: boolean;
    /**
     * A two dimensional array representing the pixels from the Image Servicedisplayed on the client. The length of the first dimension is the same asthe number of bands in the layer. The length of the second dimension is[height](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#height) * [width](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#width). The length of each band is the same. Thepixels in each band are arranged row by row in this format:`[p_00, p_10, p_20, ... p_10, p_11, ...]` where `p_xy` is the pixel valueat the column `x` and row `y`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#pixels)
     */
    pixels:
      | number[]
      | Int8Array
      | Uint8Array
      | Uint8ClampedArray
      | Int16Array
      | Uint16Array
      | Int32Array
      | Uint32Array
      | Float32Array
      | Float64Array;
    /**
     * The pixel type.**Possible Values:** s8 | s16 | s32 | u8 | u16 | u32 | f32 | f64
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#pixelType)
     */
    pixelType: string;
    /**
     * An array of objects containing numeric statistical properties. Each objecthas the following specification if defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#statistics)
     */
    statistics: PixelBlockStatistics[];
    /**
     * Number of valid pixels
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#validPixelCount)
     */
    validPixelCount: number;
    /**
     * The width (or number of columns) of the PixelBlock in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#width)
     */
    width: number;

    /**
     * Adds another plane to the PixelBlock.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#addData)
     *
     * @param planeData The data to add to the PixelBlock.
     * @param planeData.pixels A two dimensional array representing the                                     pixels to add.
     * @param planeData.statistics An array of objects containing                                       numeric statistical properties.                             See [statistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#statistics) for details on the specifications                             of each object.
     *
     */
    addData(planeData: PixelBlockAddDataPlaneData): void;
    /**
     * Returns pixels and masks using a single array in bip format(e.g. [p_00_r, p_00_g, p_00_b, p_00_a, p_10_r, p_10_g, p_10_b, p_10_a, .....]).Use this method to get an unsigned 8 bit pixel array.The result can be used to create a webgl texture.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#getAsRGBA)
     *
     *
     */
    getAsRGBA(): Uint8ClampedArray;
    /**
     * Similar to [getAsRGBA](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#getAsRGBA), but returns floating point data.The result can be used to create a webgl texture (OES_texture_float).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#getAsRGBAFloat)
     *
     *
     */
    getAsRGBAFloat(): Float32Array;
    /**
     * Returns the plane band count of the PixelBlock.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#getPlaneCount)
     *
     *
     */
    getPlaneCount(): number;
  }

  interface PixelBlockConstructor {
    new (properties?: PixelBlockProperties): PixelBlock;
  }

  export const PixelBlock: PixelBlockConstructor;

  interface PixelBlockProperties {
    /**
     * The height (or number of rows) of the PixelBlock in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#height)
     */
    height?: number;
    /**
     * Bit Mask. All pixels are valid when mask is null.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#mask)
     */
    mask?: number[] | Uint8Array;
    /**
     * Indicates whether mask should be used as alpha values. If no (default), a pixel is valid when corresponding mask value is truthy
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#maskIsAlpha)
     */
    maskIsAlpha?: boolean;
    /**
     * A two dimensional array representing the pixels from the Image Servicedisplayed on the client. The length of the first dimension is the same asthe number of bands in the layer. The length of the second dimension is[height](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#height) * [width](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#width). The length of each band is the same. Thepixels in each band are arranged row by row in this format:`[p_00, p_10, p_20, ... p_10, p_11, ...]` where `p_xy` is the pixel valueat the column `x` and row `y`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#pixels)
     */
    pixels?:
      | number[]
      | Int8Array
      | Uint8Array
      | Uint8ClampedArray
      | Int16Array
      | Uint16Array
      | Int32Array
      | Uint32Array
      | Float32Array
      | Float64Array;
    /**
     * The pixel type.**Possible Values:** s8 | s16 | s32 | u8 | u16 | u32 | f32 | f64
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#pixelType)
     */
    pixelType?: string;
    /**
     * An array of objects containing numeric statistical properties. Each objecthas the following specification if defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#statistics)
     */
    statistics?: PixelBlockStatistics[];
    /**
     * Number of valid pixels
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#validPixelCount)
     */
    validPixelCount?: number;
    /**
     * The width (or number of columns) of the PixelBlock in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#width)
     */
    width?: number;
  }

  export interface PixelBlockAddDataPlaneData extends Object {
    /**
     * A two dimensional array representing the                                     pixels to add.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#addData)
     */
    pixels: number[][];
    /**
     * An array of objects containing                                       numeric statistical properties.                             See [statistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#statistics) for details on the specifications                             of each object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#addData)
     */
    statistics: any[];
  }

  export interface PixelBlockStatistics extends Object {
    /**
     * The maximum pixel value in the [pixels](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#pixels) array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#statistics)
     */
    maxValue?: number;
    /**
     * The minimum pixel value in the [pixels](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#pixels) array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#statistics)
     */
    minValue?: number;
    /**
     * Value representing areas of no data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#statistics)
     */
    noDataValue?: number;
  }

  interface RangeDomain extends Domain {
    /**
     * The maximum valid value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RangeDomain.html#maxValue)
     */
    maxValue: number;
    /**
     * The minimum valid value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RangeDomain.html#minValue)
     */
    minValue: number;
    /**
     * The domain type. This value is always `range`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RangeDomain.html#type)
     */
    readonly type: "range";
  }

  interface RangeDomainConstructor {
    new (properties?: RangeDomainProperties): RangeDomain;

    fromJSON(json: any): RangeDomain;
  }

  export const RangeDomain: RangeDomainConstructor;

  interface RangeDomainProperties extends DomainProperties {
    /**
     * The maximum valid value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RangeDomain.html#maxValue)
     */
    maxValue?: number;
    /**
     * The minimum valid value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RangeDomain.html#minValue)
     */
    minValue?: number;
  }

  interface RasterFunction extends Accessor, JSONSupport {
    /**
     * The arguments for the raster function. The structure depends on the function specified.See [raster functions](https://developers.arcgis.com/documentation/common-data-types/raster-function-objects.htm)for a list of functions and their arguments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterFunction.html#functionArguments)
     */
    functionArguments: any;
    /**
     * The raster function name.See [raster functions](https://developers.arcgis.com/documentation/common-data-types/raster-function-objects.htm)for a list of functions and their arguments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterFunction.html#functionName)
     */
    functionName: string;
    /**
     * Defines the pixel type of the output image.**Possible Values:** c128 | c64 | f32 | f64 | s16 | s32 | s8 | u1 | u16| u2 | u32 | u4 | u8 | unknown
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterFunction.html#outputPixelType)
     *
     * @default unknown
     */
    outputPixelType: string;
    /**
     * The variable name for the raster function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterFunction.html#variableName)
     */
    variableName: string;
  }

  interface RasterFunctionConstructor {
    new (properties?: RasterFunctionProperties): RasterFunction;

    fromJSON(json: any): RasterFunction;
  }

  export const RasterFunction: RasterFunctionConstructor;

  interface RasterFunctionProperties {
    /**
     * The arguments for the raster function. The structure depends on the function specified.See [raster functions](https://developers.arcgis.com/documentation/common-data-types/raster-function-objects.htm)for a list of functions and their arguments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterFunction.html#functionArguments)
     */
    functionArguments?: any;
    /**
     * The raster function name.See [raster functions](https://developers.arcgis.com/documentation/common-data-types/raster-function-objects.htm)for a list of functions and their arguments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterFunction.html#functionName)
     */
    functionName?: string;
    /**
     * Defines the pixel type of the output image.**Possible Values:** c128 | c64 | f32 | f64 | s16 | s32 | s8 | u1 | u16| u2 | u32 | u4 | u8 | unknown
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterFunction.html#outputPixelType)
     *
     * @default unknown
     */
    outputPixelType?: string;
    /**
     * The variable name for the raster function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterFunction.html#variableName)
     */
    variableName?: string;
  }

  interface RasterInfo extends JSONSupport {
    /**
     * The raster attribute table associated with an imagery layer.It returns categorical mapping of pixel values such asclass, group, or category. or membership.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#attributeTable)
     */
    attributeTable: FeatureSet;
    /**
     * Raster band count.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#bandCount)
     */
    bandCount: number;
    /**
     * Raster colormap that can be used to display the imagery layer.Each element in the array defines the pixel value and the red, green, and blue color values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#colormap)
     */
    colormap: number[][];
    /**
     * Raster data type controls how the data is rendered by default.**Possible Values:**Value | Description |----- | ----------- |generic | Uses the application defaults for resampling and stretching.elevation | Applies bilinear resampling and a Min-Max stretch.thematic | Applies nearest neighbor resampling and a Deviation stretch.processed | No stretch is applied.scientific | Uses the blue to red color ramp to display the data.vector-uv | Uses the U (magnitude component) and V(direction component) components in the vector field renderer.vector-magdir | Uses the magnitude and direction in the vector field renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#dataType)
     */
    dataType: string;
    /**
     * The minimum and maximum X and Y coordinates of a bounding box containing all the raster data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#extent)
     */
    extent: Extent;
    /**
     * Raster histograms return basic name-value pairs for number of bins, min andmax bounding values, counts of pixels in each bin.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#histograms)
     */
    histograms: any[];
    /**
     * Raster key properties.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#keyProperties)
     */
    keyProperties: any;
    /**
     * The multidimensional information associated with the raster.If defined, multidimensional information contains various "dimensions" ofdata for a particular value, such as time, depth, altitude, etc. Definingslices of particular dimensions in the layer is handled with the[multidimensionalDefinition](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#multidimensionalDefinition)property of the [mosaicRule](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#mosaicRule).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#multidimensionalInfo)
     */
    multidimensionalInfo: any;
    /**
     * Raster pixel size.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#pixelSize)
     */
    pixelSize: Point;
    /**
     * Pixel type for the raster data source.**Possible Values:**Value | Range of values that each cell can contain |----- | ------------------------------------------- |unknown | Pixel type is unknown |s8 | -128 to 127 |s16 | -32768 to 32767 |s32 | -2147483648 to 2147483647 |u8 | 0 to 255 |u16 | 0 to 65535u32 | 0 to 4294967295f32 | -3.402823466e+38 to 3.402823466e+38f64 | 0 to 18446744073709551616
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#pixelType)
     */
    pixelType: string;
    /**
     * The spatial reference of the raster.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#spatialReference)
     */
    spatialReference: SpatialReference;
    /**
     * Raster band statistics. These include the minimum value in the raster, maximum value, mean of all values, and standard deviation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#statistics)
     */
    statistics: RasterInfoStatistics[];
  }

  interface RasterInfoConstructor {
    new (properties?: RasterInfoProperties): RasterInfo;

    fromJSON(json: any): RasterInfo;
  }

  export const RasterInfo: RasterInfoConstructor;

  interface RasterInfoProperties {
    /**
     * The raster attribute table associated with an imagery layer.It returns categorical mapping of pixel values such asclass, group, or category. or membership.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#attributeTable)
     */
    attributeTable?: FeatureSetProperties;
    /**
     * Raster band count.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#bandCount)
     */
    bandCount?: number;
    /**
     * Raster colormap that can be used to display the imagery layer.Each element in the array defines the pixel value and the red, green, and blue color values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#colormap)
     */
    colormap?: number[][];
    /**
     * Raster data type controls how the data is rendered by default.**Possible Values:**Value | Description |----- | ----------- |generic | Uses the application defaults for resampling and stretching.elevation | Applies bilinear resampling and a Min-Max stretch.thematic | Applies nearest neighbor resampling and a Deviation stretch.processed | No stretch is applied.scientific | Uses the blue to red color ramp to display the data.vector-uv | Uses the U (magnitude component) and V(direction component) components in the vector field renderer.vector-magdir | Uses the magnitude and direction in the vector field renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#dataType)
     */
    dataType?: string;
    /**
     * The minimum and maximum X and Y coordinates of a bounding box containing all the raster data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#extent)
     */
    extent?: ExtentProperties;
    /**
     * Raster histograms return basic name-value pairs for number of bins, min andmax bounding values, counts of pixels in each bin.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#histograms)
     */
    histograms?: any[];
    /**
     * Raster key properties.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#keyProperties)
     */
    keyProperties?: any;
    /**
     * The multidimensional information associated with the raster.If defined, multidimensional information contains various "dimensions" ofdata for a particular value, such as time, depth, altitude, etc. Definingslices of particular dimensions in the layer is handled with the[multidimensionalDefinition](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#multidimensionalDefinition)property of the [mosaicRule](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#mosaicRule).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#multidimensionalInfo)
     */
    multidimensionalInfo?: any;
    /**
     * Raster pixel size.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#pixelSize)
     */
    pixelSize?: PointProperties;
    /**
     * Pixel type for the raster data source.**Possible Values:**Value | Range of values that each cell can contain |----- | ------------------------------------------- |unknown | Pixel type is unknown |s8 | -128 to 127 |s16 | -32768 to 32767 |s32 | -2147483648 to 2147483647 |u8 | 0 to 255 |u16 | 0 to 65535u32 | 0 to 4294967295f32 | -3.402823466e+38 to 3.402823466e+38f64 | 0 to 18446744073709551616
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#pixelType)
     */
    pixelType?: string;
    /**
     * The spatial reference of the raster.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * Raster band statistics. These include the minimum value in the raster, maximum value, mean of all values, and standard deviation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#statistics)
     */
    statistics?: RasterInfoStatistics[];
  }

  export interface RasterInfoStatistics extends Object {
    /**
     * The minimum pixel value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#statistics)
     */
    min: number;
    /**
     * The maximum pixel value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#statistics)
     */
    max: number;
    /**
     * The standard deviation of calculated pixel values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#statistics)
     */
    stddev: number;
    /**
     * The average of calculated pixel values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#statistics)
     */
    avg: number;
  }

  interface Relationship extends Accessor {
    /**
     * The cardinality which specifies the number of objects in the origin[FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) related to thenumber of objects in the destination [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html).Please see the [Desktop help](http://desktop.arcgis.com/en/arcmap/10.3/manage-data/relationships/relationship-class-properties.htm#GUID-989CB1D1-AC51-4A4C-8D9D-0AB9E647FFFD)for additional information on cardinality.**Possible values:** one-to-one | one-to-many | many-to-many
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#cardinality)
     */
    cardinality: string;
    /**
     * The unique ID for the relationship. These ids for the relationshipsthe [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) participatesin are listed in the ArcGIS Services directory.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#id)
     */
    id: number;
    /**
     * The field used to establish the relate within the [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#keyField)
     */
    keyField: string;
    /**
     * The name of the relationship.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#name)
     */
    name: string;
    /**
     * The unique ID of the related [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#relatedTableId)
     */
    relatedTableId: number;
  }

  interface RelationshipConstructor {
    new (properties?: RelationshipProperties): Relationship;
  }

  export const Relationship: RelationshipConstructor;

  interface RelationshipProperties {
    /**
     * The cardinality which specifies the number of objects in the origin[FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) related to thenumber of objects in the destination [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html).Please see the [Desktop help](http://desktop.arcgis.com/en/arcmap/10.3/manage-data/relationships/relationship-class-properties.htm#GUID-989CB1D1-AC51-4A4C-8D9D-0AB9E647FFFD)for additional information on cardinality.**Possible values:** one-to-one | one-to-many | many-to-many
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#cardinality)
     */
    cardinality?: string;
    /**
     * The unique ID for the relationship. These ids for the relationshipsthe [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) participatesin are listed in the ArcGIS Services directory.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#id)
     */
    id?: number;
    /**
     * The field used to establish the relate within the [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#keyField)
     */
    keyField?: string;
    /**
     * The name of the relationship.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#name)
     */
    name?: string;
    /**
     * The unique ID of the related [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#relatedTableId)
     */
    relatedTableId?: number;
  }

  interface Sublayer extends Accessor {
    /**
     * A SQL where clause used to filter features in the image.Only the features that satisfy the definition expression are displayed in the[View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html). Definition expressionsmay be set when a sublayer is constructed prior to it loading in the view or after it hasbeen added to the MapImageLayer. To see if you can use this property, check the`supportsSublayerDefinitionExpression` property of[MapImageLayer.capabilities](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#capabilities).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#definitionExpression)
     */
    definitionExpression: string;
    /**
     * The sublayer's layer ID. When a [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#source) is not defined on thelayer, this value represents the id of the sublayer defined by the map service.If creating a [DynamicDataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicDataLayer) or a [MapDataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#MapDataLayer)and adding it to the [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#source) property of the sublayer, the value of thisproperty can be anything set by the developer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#id)
     */
    id: number;
    /**
     * The label definition for this layer,specified as an array of [LabelClass](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html) objects.Use this property to specify labeling properties for the layer such as label expression, placement, and size.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#labelingInfo)
     */
    labelingInfo: LabelClass[];
    /**
     * Indicates if labels for the sublayer will be visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#labelsVisible)
     *
     * @default true
     */
    labelsVisible: boolean;
    /**
     * The [MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html) or [TileLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html) to which the sublayer belongs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#layer)
     */
    layer: MapImageLayer | TileLayer;
    /**
     * Indicates whether the layer will be included in the legend. When `false`, the layer will be excluded from the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled: boolean;
    /**
     * Indicates how the layer should display in the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget.The possible values are listed below.Value | Description------|------------ show | The layer is visible in the table of contents. hide | The layer is hidden in the table of contents. hide-children | Hide the children layers from the table of contents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#listMode)
     *
     * @default show
     */
    listMode: "show" | "hide" | "hide-children";
    /**
     * The maximum scale (most zoomed in) at which the layer is visible in the view.If the map is zoomed in beyond this scale, the layer will not be visible.A value of `0` means the layer does not have a maximum scale.The maxScale value should always be smaller than the [minScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#minScale) value,and greater than or equal to the service specification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#maxScale)
     */
    maxScale: number;
    /**
     * The minimum scale (most zoomed out) at which the layer is visible in the view.If the map is zoomed out beyond this scale, the layer will not be visible.A value of `0` means the layer does not have a minimum scale.The minScale value should always be larger than the [maxScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#maxScale) value,and lesser than or equal to the service specification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#minScale)
     */
    minScale: number;
    /**
     * The level of opacity to set on the sublayer on a scalefrom 0.0 - 1.0 where `0` is fully transparent and `1.0` is fully opaque.If the [MapImageLayer.opacity](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#opacity)is set, the actual opacity value of the sublayer will be the value of[MapImageLayer.opacity](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#opacity) multipliedby the sublayer's opacity.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#opacity)
     */
    opacity: number;
    /**
     * Indicates whether to display popups when features in the layer are clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#popupEnabled)
     *
     * @default true
     */
    popupEnabled: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#renderer)
     */
    renderer: Renderer;
    /**
     * An object that allows you to create a dynamic layer with dataeither from the map service sublayers or data from a registered workspace.See [DynamicMapLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicMapLayer)for creating dynamic layers from map service layers for on the flyrendering, labeling, and filtering (definition expressions). To createdynamic layers from other sources in registered workspaces such as tables and table joins,see [DynamicDataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicDataLayer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#source)
     */
    source: DynamicMapLayer | DynamicDataLayer;
    /**
     * If a sublayer contains sublayers, thisproperty is a [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of [Sublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html)objects belonging to the given sublayer with sublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#sublayers)
     */
    sublayers: Collection<Sublayer>;
    /**
     * The title of the sublayer used to identify it in places such as the[LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) and [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widgets.This value can be defined in the map service or programmaticallyby the developer. It can also be useful for finding a specificsublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#title)
     */
    title: string;
    /**
     * The URL to the REST endpoint of the sublayer. This allowsyou to view the schema of fields and query tables locatedin registered workspaces.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#url)
     */
    readonly url: string;
    /**
     * Indicates if the layer is visible in the view.To see if you can use this property, check the`supportsSublayerVisibility` property of[MapImageLayer.capabilities](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#capabilities).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#visible)
     */
    visible: boolean;

    /**
     * Creates a deep clone of the sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#clone)
     *
     *
     */
    clone(): Sublayer;
    /**
     * A convenient method for creating a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) instancebased on the Sublayer's configuration, including[dynamic sources](https://enterprise.arcgis.com/en/server/latest/publish-services/linux/about-dynamic-layers.htm).This allows you to take advantage of FeatureLayercapabilities not supported in Sublayer, such as the[Smart Mapping creator functions](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#createFeatureLayer)
     *
     *
     */
    createFeatureLayer(): IPromise<FeatureLayer>;
    /**
     * Creates a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html) object withdefault values representing the layer's state, including filters (definitionexpression) on the layer's features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#createQuery)
     *
     *
     */
    createQuery(): Query;
    /**
     * Executes a [query](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html) against features in the sublayer.To see if you can use this property, check the`supportsQuery` property of[MapImageLayer.capabilities](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#capabilities).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#queryFeatures)
     *
     * @param query Specifies the attributes and spatialfilter of the query. If no parameters are specified, then all features satisfying thelayer's configuration/filters are returned.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryFeatures(query?: Query | QueryProperties, options?: SublayerQueryFeaturesOptions): IPromise<FeatureSet>;
    /**
     * Serialize the sublayer for usage in /export
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#toExportImageJSON)
     *
     *
     */
    toExportImageJSON(): void;
  }

  interface SublayerConstructor {
    new (properties?: SublayerProperties): Sublayer;
  }

  export const Sublayer: SublayerConstructor;

  interface SublayerProperties {
    /**
     * A SQL where clause used to filter features in the image.Only the features that satisfy the definition expression are displayed in the[View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html). Definition expressionsmay be set when a sublayer is constructed prior to it loading in the view or after it hasbeen added to the MapImageLayer. To see if you can use this property, check the`supportsSublayerDefinitionExpression` property of[MapImageLayer.capabilities](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#capabilities).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#definitionExpression)
     */
    definitionExpression?: string;
    /**
     * The sublayer's layer ID. When a [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#source) is not defined on thelayer, this value represents the id of the sublayer defined by the map service.If creating a [DynamicDataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicDataLayer) or a [MapDataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#MapDataLayer)and adding it to the [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#source) property of the sublayer, the value of thisproperty can be anything set by the developer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#id)
     */
    id?: number;
    /**
     * The label definition for this layer,specified as an array of [LabelClass](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html) objects.Use this property to specify labeling properties for the layer such as label expression, placement, and size.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#labelingInfo)
     */
    labelingInfo?: LabelClassProperties[];
    /**
     * Indicates if labels for the sublayer will be visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#labelsVisible)
     *
     * @default true
     */
    labelsVisible?: boolean;
    /**
     * The [MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html) or [TileLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html) to which the sublayer belongs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#layer)
     */
    layer?: MapImageLayerProperties | TileLayerProperties;
    /**
     * Indicates whether the layer will be included in the legend. When `false`, the layer will be excluded from the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled?: boolean;
    /**
     * Indicates how the layer should display in the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget.The possible values are listed below.Value | Description------|------------ show | The layer is visible in the table of contents. hide | The layer is hidden in the table of contents. hide-children | Hide the children layers from the table of contents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#listMode)
     *
     * @default show
     */
    listMode?: "show" | "hide" | "hide-children";
    /**
     * The maximum scale (most zoomed in) at which the layer is visible in the view.If the map is zoomed in beyond this scale, the layer will not be visible.A value of `0` means the layer does not have a maximum scale.The maxScale value should always be smaller than the [minScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#minScale) value,and greater than or equal to the service specification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#maxScale)
     */
    maxScale?: number;
    /**
     * The minimum scale (most zoomed out) at which the layer is visible in the view.If the map is zoomed out beyond this scale, the layer will not be visible.A value of `0` means the layer does not have a minimum scale.The minScale value should always be larger than the [maxScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#maxScale) value,and lesser than or equal to the service specification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#minScale)
     */
    minScale?: number;
    /**
     * The level of opacity to set on the sublayer on a scalefrom 0.0 - 1.0 where `0` is fully transparent and `1.0` is fully opaque.If the [MapImageLayer.opacity](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#opacity)is set, the actual opacity value of the sublayer will be the value of[MapImageLayer.opacity](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#opacity) multipliedby the sublayer's opacity.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#opacity)
     */
    opacity?: number;
    /**
     * Indicates whether to display popups when features in the layer are clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#popupEnabled)
     *
     * @default true
     */
    popupEnabled?: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#renderer)
     */
    renderer?: RendererProperties;
    /**
     * An object that allows you to create a dynamic layer with dataeither from the map service sublayers or data from a registered workspace.See [DynamicMapLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicMapLayer)for creating dynamic layers from map service layers for on the flyrendering, labeling, and filtering (definition expressions). To createdynamic layers from other sources in registered workspaces such as tables and table joins,see [DynamicDataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicDataLayer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#source)
     */
    source?: DynamicMapLayer | DynamicDataLayer;
    /**
     * If a sublayer contains sublayers, thisproperty is a [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of [Sublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html)objects belonging to the given sublayer with sublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#sublayers)
     */
    sublayers?: CollectionProperties<SublayerProperties>;
    /**
     * The title of the sublayer used to identify it in places such as the[LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) and [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widgets.This value can be defined in the map service or programmaticallyby the developer. It can also be useful for finding a specificsublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#title)
     */
    title?: string;
    /**
     * Indicates if the layer is visible in the view.To see if you can use this property, check the`supportsSublayerVisibility` property of[MapImageLayer.capabilities](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#capabilities).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#visible)
     */
    visible?: boolean;
  }

  /**
   * A dynamic data layer is a layer created on-the-fly with data stored in a[registered workspace](https://server.arcgis.com/en/server/latest/publish-services/windows/overview-register-data-with-arcgis-server.htm). This is data that can be rendered and queried on the fly,but that isn't explicitly exposed as a service sublayer.Depending on the type of data source, these layers are classified asone of the following:Data source | Description------------|------------[TableDataSource](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#TableDataSource) | A feature class with geometries or table without geometries. When a table data source does not contain geometries, it may be used as one of the sources in a [join operation](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#JoinTableDataSource). Feature class tables may be used on their own since they contain a geometry field.[QueryTableDataSource](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#QueryTableDataSource) | A feature class or table that may be queried on the fly with a SQL where clause. This data source is useful for scenarios where you have a table containing unique geometries and another table with multiple records that match to each geometry. You can use the QueryTableDataSource to select only a subset of those matching records (so records in both tables have a one-to-one relationship with each other) and join them to the table with geometries.[RasterDataSource](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#RasterDataSource) | A raster dataset used for visualization purposes only.[JoinTableDataSource](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#JoinTableDataSource) | This data source consists of two data sources joined by a common attribute or key. The left table data source typically contains geometries, while the right source may be a table or query table without geometries.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicDataLayer)
   */
  export interface DynamicDataLayer extends Object {
    /**
     * This value is always `data-layer` and is inferred whenthe `dataSource` property is set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicDataLayer)
     */
    type: string;
    /**
     * A table,feature class, or raster that resides in a registered workspace (either a folder or geodatabase).The data sources are not visible in the Services Directory by default. They may be viewed, published, and configured usingthe ArcGIS Server Manager.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicDataLayer)
     */
    dataSource: TableDataSource | QueryTableDataSource | RasterDataSource | JoinTableDataSource;
    /**
     * Controls field visibility in the layer. Only specified fields will be visible.If `null`, all fields are visible in the dynamic layer. The specification for a field object isprovided below.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicDataLayer)
     */
    fields: DynamicDataLayerFields[];
  }

  /**
   * A dynamic map layer refers to a layer published in a map service that hasdynamic layers enabled.This layer type may be used to create multiple [sublayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#sublayers)that point to the same service layer, but are assigned different definitionexpressions, renderers, and other properties.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicMapLayer)
   */
  export interface DynamicMapLayer extends Object {
    /**
     * This value is always `map-layer` and is inferred whenthe `mapLayerId` property is set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicMapLayer)
     */
    type: string;
    /**
     * The [id](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#id) of the service sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicMapLayer)
     */
    mapLayerId: number;
    /**
     * An optional property for specifying the GDB version.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicMapLayer)
     */
    gdbVersion: string;
  }

  /**
   * The result of an on-the-fly join operation at runtime. Nested joins are supported.To use nested joins, set either `leftTableSource` or `rightTableSource` to `join-table`.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#JoinTableDataSource)
   */
  export interface JoinTableDataSource extends Object {
    /**
     * This value is always `join-table` and is inferred when otherjoin table properties of this object are set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#JoinTableDataSource)
     */
    type: string;
    /**
     * The field name used for joining or matching records in the left table torecords in the right table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#JoinTableDataSource)
     */
    leftTableKey: string;
    /**
     * The field name used for joining or matching records in the right tableto records in the left table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#JoinTableDataSource)
     */
    rightTableKey: string;
    /**
     * The left table for joining to the right table source. This can either be a dynamic map layer or a dynamic data layer. The dynamic data layer may contain another join data source used for nested joining.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#JoinTableDataSource)
     */
    leftTableSource: DynamicMapLayer | DynamicDataLayer;
    /**
     * The right table for joining to the left table source. This can either be a dynamic map layer or a dynamic data layer. The dynamic data layer may contain another join data source used for nested joining.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#JoinTableDataSource)
     */
    rightTableSource: DynamicMapLayer | DynamicDataLayer;
    /**
     * The type of join that will be performed.Possible Value | Description---------------|------------left-outer-join | Unmatched records in the left table source are preserved and joined with `null` values in the right table source.left-inner-join | Records in the left table source are discarded if they are unmatched with records in the right table source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#JoinTableDataSource)
     */
    joinType: string;
  }

  /**
   * A query table is a feature class or table defined by a SQL query on the fly.Query layers allow both spatial and nonspatial informationstored in a database to be easily integrated into map serviceoperations. Since a query table uses SQL to directly query databasetables and views, spatial information used by a query table isnot required to be in a geodatabase.This data source is useful for scenarios where you have a table containingmultiple records that match to a single geometry in either another table or a map service layer.You can use the QueryTableDataSource to select only a subset of those matching recordsand join them to the table with geometriesso records in both tables have a one-to-one relationship with each other.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#QueryTableDataSource)
   */
  export interface QueryTableDataSource extends Object {
    /**
     * This value is always `query-table` andis inferred when the `query` property of this object is set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#QueryTableDataSource)
     */
    type: string;
    /**
     * The workspace where the data resides (defined in ArcGIS Server Manager).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#QueryTableDataSource)
     */
    workspaceId: string;
    /**
     * The SQL query used to filter records.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#QueryTableDataSource)
     */
    query: string;
    /**
     * The field name(s) containing the unique IDs for eachrecord in the table. This can be a comma separated list if the query table is usedin a [JoinTableDataSource](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#JoinDataTableSource).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#QueryTableDataSource)
     */
    oidFields: string;
    /**
     * The spatial reference of the geometry of each feature in the table source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#QueryTableDataSource)
     */
    spatialReference: SpatialReference;
    /**
     * The geometry type of each record in the table.    **Possible Values:** point | multipoint | polyline | polygon | multipatch
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#QueryTableDataSource)
     */
    geometryType: string;
  }

  /**
   * A file-based raster that resides in a registered raster workspace. The raster mayonly be displayed in the view, not queried or assigned a renderer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#RasterDataSource)
   */
  export interface RasterDataSource extends Object {
    /**
     * This value is always `raster`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#RasterDataSource)
     */
    type: string;
    /**
     * The workspace where the raster resides as defined in the ArcGIS Server Manager.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#RasterDataSource)
     */
    workspaceId: string;
    /**
     * The name of the raster in the registered workspace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#RasterDataSource)
     */
    dataSourceName: string;
  }

  export interface SublayerQueryFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#queryFeatures)
     */
    signal?: AbortSignal;
  }

  /**
   * A table or feature class that resides in a registered workspace (either a folder or geodatabase).In the case of a geodatabase, if versioned, use `version` toswitch to an alternate geodatabase version.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#TableDataSource)
   */
  export interface TableDataSource extends Object {
    /**
     * This value is always `table`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#TableDataSource)
     */
    type: string;
    /**
     * The workspace where the table resides as defined in the ArcGIS Server Manager.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#TableDataSource)
     */
    workspaceId: string;
    /**
     * The name of the table in the registered workspace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#TableDataSource)
     */
    dataSourceName: string;
    /**
     * References the geodatabase version if multiple versions exist in the geodatabase.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#TableDataSource)
     */
    gdbVersion: string;
  }

  export interface DynamicDataLayerFields extends Object {
    /**
     * The name of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicDataLayer)
     */
    name: string;
    /**
     * The alias of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicDataLayer)
     */
    alias: string;
  }

  interface TileInfo extends Accessor, JSONSupport {
    /**
     * The dots per inch (DPI) of the tiling scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#dpi)
     */
    dpi: number;
    /**
     * Image format of the cached tiles.**Possible Values:** png | png24 | png32 | jpg | dib | tiff | emf | ps | pdf | gif | svg | svgz | mixed | lerc
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#format)
     */
    format: string;
    /**
     * Indicates if the tiling scheme supports wrap around.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#isWrappable)
     */
    isWrappable: boolean;
    /**
     * An array of levels of detail that define the tiling scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#lods)
     */
    lods: LOD[];
    /**
     * The tiling scheme origin.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#origin)
     */
    origin: Point;
    /**
     * Size of tiles in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#size)
     */
    size: number[];
    /**
     * The spatial reference of the tiling schema.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#spatialReference)
     */
    spatialReference: SpatialReference;

    /**
     * Utility method used to convert a scale value to its corresponding zoom value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#scaleToZoom)
     *
     * @param scale The scale value to convert.
     *
     */
    scaleToZoom(scale: number): number;
    /**
     * Utility method used to convert a zoom value to its corresponding scale value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#zoomToScale)
     *
     * @param zoom The zoom value to convert.
     *
     */
    zoomToScale(zoom: number): number;
  }

  interface TileInfoConstructor {
    new (properties?: TileInfoProperties): TileInfo;

    /**
     * A convenience method used to create a new TileInfo instance with preset properties like [LODs](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#lods). Optionally, properties such as `size`, `scales[]`, anda `[SpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html)` can also be set to calculate [LODs](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#lods) for each TileInfo.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#create)
     *
     * @param options An object that contains the size, scales, and/or [SpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html) used tocompute the new TileInfo instance.
     * @param options.size The size of each tile in pixels.
     * @param options.spatialReference The spatial referencefor the new TileInfo instance. If the spatial reference is not WGS84 nor WebMercator,the origin of the TileInfo is `0.0`.
     * @param options.scales An array of scale values to use for the TileInfo.If none are specified, the scales from the [ArcGIS Online basemaps](https://www.arcgis.com/home/group.html?id=702026e41f6641fb85da88efe79dc166#overview) are used from level 0 through 24.
     *
     */
    create(options?: TileInfoCreateOptions): TileInfo;

    fromJSON(json: any): TileInfo;
  }

  export const TileInfo: TileInfoConstructor;

  interface TileInfoProperties {
    /**
     * The dots per inch (DPI) of the tiling scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#dpi)
     */
    dpi?: number;
    /**
     * Image format of the cached tiles.**Possible Values:** png | png24 | png32 | jpg | dib | tiff | emf | ps | pdf | gif | svg | svgz | mixed | lerc
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#format)
     */
    format?: string;
    /**
     * Indicates if the tiling scheme supports wrap around.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#isWrappable)
     */
    isWrappable?: boolean;
    /**
     * An array of levels of detail that define the tiling scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#lods)
     */
    lods?: LODProperties[];
    /**
     * The tiling scheme origin.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#origin)
     */
    origin?: PointProperties;
    /**
     * Size of tiles in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#size)
     */
    size?: number[];
    /**
     * The spatial reference of the tiling schema.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
  }

  export interface TileInfoCreateOptions extends Object {
    /**
     * The size of each tile in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#create)
     *
     * @default 256
     */
    size?: number;
    /**
     * The spatial referencefor the new TileInfo instance. If the spatial reference is not WGS84 nor WebMercator,the origin of the TileInfo is `0.0`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#create)
     *
     * @default WebMercator
     */
    spatialReference?: SpatialReference;
    /**
     * An array of scale values to use for the TileInfo.If none are specified, the scales from the [ArcGIS Online basemaps](https://www.arcgis.com/home/group.html?id=702026e41f6641fb85da88efe79dc166#overview) are used from level 0 through 24.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#create)
     *
     * @default The scales provided by ArcGIS Online basemaps
     */
    scales?: number[];
  }

  interface TileMatrixSet extends Accessor, JSONSupport {
    /**
     * The full extent of the TileMatrixSet.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileMatrixSet.html#fullExtent)
     */
    fullExtent: Extent;
    /**
     * The unique ID assigned to the TileMatrixSet.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileMatrixSet.html#id)
     */
    id: string;
    /**
     * The tiling scheme information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileMatrixSet.html#tileInfo)
     */
    tileInfo: TileInfo;

    /**
     * Creates a deep clone of this TileMatrixSet.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileMatrixSet.html#clone)
     *
     *
     */
    clone(): TileMatrixSet;
  }

  interface TileMatrixSetConstructor {
    new (properties?: TileMatrixSetProperties): TileMatrixSet;

    fromJSON(json: any): TileMatrixSet;
  }

  export const TileMatrixSet: TileMatrixSetConstructor;

  interface TileMatrixSetProperties {
    /**
     * The full extent of the TileMatrixSet.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileMatrixSet.html#fullExtent)
     */
    fullExtent?: ExtentProperties;
    /**
     * The unique ID assigned to the TileMatrixSet.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileMatrixSet.html#id)
     */
    id?: string;
    /**
     * The tiling scheme information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileMatrixSet.html#tileInfo)
     */
    tileInfo?: TileInfoProperties;
  }

  interface TimeInfo extends Accessor, JSONSupport {
    /**
     * The name of the field containing the end time information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#endField)
     */
    endField: string;
    /**
     * The time extent defines the start time and end time for all data in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#fullTimeExtent)
     *
     * @default null
     */
    fullTimeExtent: TimeExtent;
    /**
     * The time interval defines the granularity of the temporal data and allows you tovisualize the data at specified intervals using the [time slider widget](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html).Usually temporal data is collected at regular intervals such as every hour or every day.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#interval)
     */
    interval: TimeInterval;
    /**
     * The name of the field containing the start time information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#startField)
     */
    startField: string;

    /**
     * Creates a deep clone of TimeInfo object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#clone)
     *
     *
     */
    clone(): TimeInfo;
  }

  interface TimeInfoConstructor {
    new (properties?: TimeInfoProperties): TimeInfo;

    fromJSON(json: any): TimeInfo;
  }

  export const TimeInfo: TimeInfoConstructor;

  interface TimeInfoProperties {
    /**
     * The name of the field containing the end time information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#endField)
     */
    endField?: string;
    /**
     * The time extent defines the start time and end time for all data in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#fullTimeExtent)
     *
     * @default null
     */
    fullTimeExtent?: TimeExtentProperties;
    /**
     * The time interval defines the granularity of the temporal data and allows you tovisualize the data at specified intervals using the [time slider widget](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html).Usually temporal data is collected at regular intervals such as every hour or every day.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#interval)
     */
    interval?: TimeIntervalProperties;
    /**
     * The name of the field containing the start time information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#startField)
     */
    startField?: string;
  }

  interface WMSSublayer extends Accessor {
    /**
     * Description for the WMS sublayer.This defaults to the value of the Abstract property from the WMS GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#description)
     */
    description: string;
    /**
     * The full extent of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#fullExtent)
     */
    fullExtent: Extent;
    /**
     * The id for the WMS sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#id)
     */
    id: number;
    /**
     * The [WMSLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html) to which the sublayer belongs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#layer)
     */
    layer: WMSLayer;
    /**
     * Indicates whether the layer will be included in the legend. When `false`, the layer will be excluded from the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled: boolean;
    /**
     * A string url pointing to a legend image for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#legendUrl)
     */
    legendUrl: string;
    /**
     * Name of the WMS sublayer.This defaults to the value of the Name property from the WMS GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#name)
     */
    name: string;
    /**
     * Indicates whether to display popups when features in the layer are clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#popupEnabled)
     *
     * @default false
     */
    popupEnabled: boolean;
    /**
     * Indicates if the layer can be queried, i.e. the service supports GetFeatureInfo with either text/html or text/plain formats.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#queryable)
     *
     * @default false
     */
    queryable: boolean;
    /**
     * List of spatialReferences (WKID) derived from the CRS elements of the first layer in the GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#spatialReferences)
     */
    spatialReferences: number[];
    /**
     * A collection of [WMSSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html)s.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#sublayers)
     */
    sublayers: Collection<WMSSublayer>;
    /**
     * The title of the WMS sublayer used to identify it in places such as the[LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) and [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widgets.This defaults to the value of the Title property from the WMS GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#title)
     */
    title: string;
    /**
     * Indicates if the layer is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#visible)
     */
    visible: boolean;

    /**
     * Creates a deep clone of the WMS sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#clone)
     *
     *
     */
    clone(): WMSSublayer;
  }

  interface WMSSublayerConstructor {
    new (properties?: WMSSublayerProperties): WMSSublayer;
  }

  export const WMSSublayer: WMSSublayerConstructor;

  interface WMSSublayerProperties {
    /**
     * Description for the WMS sublayer.This defaults to the value of the Abstract property from the WMS GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#description)
     */
    description?: string;
    /**
     * The full extent of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#fullExtent)
     */
    fullExtent?: ExtentProperties;
    /**
     * The id for the WMS sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#id)
     */
    id?: number;
    /**
     * The [WMSLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html) to which the sublayer belongs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#layer)
     */
    layer?: WMSLayerProperties;
    /**
     * Indicates whether the layer will be included in the legend. When `false`, the layer will be excluded from the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled?: boolean;
    /**
     * A string url pointing to a legend image for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#legendUrl)
     */
    legendUrl?: string;
    /**
     * Name of the WMS sublayer.This defaults to the value of the Name property from the WMS GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#name)
     */
    name?: string;
    /**
     * Indicates whether to display popups when features in the layer are clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#popupEnabled)
     *
     * @default false
     */
    popupEnabled?: boolean;
    /**
     * Indicates if the layer can be queried, i.e. the service supports GetFeatureInfo with either text/html or text/plain formats.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#queryable)
     *
     * @default false
     */
    queryable?: boolean;
    /**
     * List of spatialReferences (WKID) derived from the CRS elements of the first layer in the GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#spatialReferences)
     */
    spatialReferences?: number[];
    /**
     * A collection of [WMSSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html)s.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#sublayers)
     */
    sublayers?: CollectionProperties<WMSSublayerProperties>;
    /**
     * The title of the WMS sublayer used to identify it in places such as the[LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) and [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widgets.This defaults to the value of the Title property from the WMS GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#title)
     */
    title?: string;
    /**
     * Indicates if the layer is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#visible)
     */
    visible?: boolean;
  }

  interface WMTSStyle extends Accessor, JSONSupport {
    /**
     * Description for the WMTS style.This defaults to the value of the Abstract property from the WMTS GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSStyle.html#description)
     */
    description: string;
    /**
     * The unique ID assigned to the style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSStyle.html#id)
     */
    id: string;
    /**
     * The URL to the legend which gets used in [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.This defaults to the value of the LegendURL property from the WMTS GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSStyle.html#legendUrl)
     */
    legendUrl: string;
    /**
     * The title of the WMTS style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSStyle.html#title)
     */
    title: string;

    /**
     * Creates a deep clone of the WMTSStyle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSStyle.html#clone)
     *
     *
     */
    clone(): WMTSStyle;
  }

  interface WMTSStyleConstructor {
    new (properties?: WMTSStyleProperties): WMTSStyle;

    fromJSON(json: any): WMTSStyle;
  }

  export const WMTSStyle: WMTSStyleConstructor;

  interface WMTSStyleProperties {
    /**
     * Description for the WMTS style.This defaults to the value of the Abstract property from the WMTS GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSStyle.html#description)
     */
    description?: string;
    /**
     * The unique ID assigned to the style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSStyle.html#id)
     */
    id?: string;
    /**
     * The URL to the legend which gets used in [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.This defaults to the value of the LegendURL property from the WMTS GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSStyle.html#legendUrl)
     */
    legendUrl?: string;
    /**
     * The title of the WMTS style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSStyle.html#title)
     */
    title?: string;
  }

  interface WMTSSublayer extends Accessor, JSONSupport {
    /**
     * Description for the WMTS sublayer.This defaults to the value of the Abstract property from the GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#description)
     */
    description: string;
    /**
     * The full extent of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#fullExtent)
     */
    fullExtent: Extent;
    /**
     * The unique ID assigned to the sublayer.If not set by the developer, it is automatically generated when the layer is loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#id)
     */
    id: string;
    /**
     * The map image format (MIME type) to request.Defaults to the first item in [imageFormats](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#imageFormats).Must be one of the supported [imageFormats](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#imageFormats).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#imageFormat)
     */
    imageFormat: string;
    /**
     * Supported image formats as retrieved from the GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#imageFormats)
     */
    imageFormats: string[];
    /**
     * The [WMTSLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html) to which the sublayer belongs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#layer)
     */
    layer: WMTSLayer;
    /**
     * The [WMTSStyle](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSStyle.html) to request.Defaults to the id of the first item in [styles](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#styles).Should be one of the supported [styles](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#styles).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#styleId)
     */
    styleId: string;
    /**
     * A collection of supported [WMTSStyle](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSStyle.html)s as retrieved from the GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#styles)
     */
    styles: Collection<WMTSStyle>;
    /**
     * The [TileMatrixSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileMatrixSet.html) to request.Defaults to the first item in [tileMatrixSets](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#tileMatrixSet) that matches the spatialReference of the view.Must be one of the supported [tileMatrixSets](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#tileMatrixSet).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#tileMatrixSet)
     */
    tileMatrixSet: TileMatrixSet;
    /**
     * The id of the [TileMatrixSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileMatrixSet.html) to request.Defaults to the id of the first item in [tileMatrixSets](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#tileMatrixSet) that matches the spatialReference of the view.Must be one of the supported [tileMatrixSets](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#tileMatrixSet).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#tileMatrixSetId)
     */
    tileMatrixSetId: string;
    /**
     * A collection of supported [TileMatrixSets](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileMatrixSet.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#tileMatrixSets)
     */
    tileMatrixSets: Collection<TileMatrixSet>;
    /**
     * The title of the WMTS sublayer used to identify it in places such as the[LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) and [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widgets.This defaults to the value of the Title property from the WMTS GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#title)
     */
    title: string;

    /**
     * Creates a deep clone of the WMTS sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#clone)
     *
     *
     */
    clone(): WMTSSublayer;
  }

  interface WMTSSublayerConstructor {
    new (properties?: WMTSSublayerProperties): WMTSSublayer;

    fromJSON(json: any): WMTSSublayer;
  }

  export const WMTSSublayer: WMTSSublayerConstructor;

  interface WMTSSublayerProperties {
    /**
     * Description for the WMTS sublayer.This defaults to the value of the Abstract property from the GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#description)
     */
    description?: string;
    /**
     * The full extent of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#fullExtent)
     */
    fullExtent?: ExtentProperties;
    /**
     * The unique ID assigned to the sublayer.If not set by the developer, it is automatically generated when the layer is loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#id)
     */
    id?: string;
    /**
     * The map image format (MIME type) to request.Defaults to the first item in [imageFormats](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#imageFormats).Must be one of the supported [imageFormats](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#imageFormats).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#imageFormat)
     */
    imageFormat?: string;
    /**
     * Supported image formats as retrieved from the GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#imageFormats)
     */
    imageFormats?: string[];
    /**
     * The [WMTSLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html) to which the sublayer belongs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#layer)
     */
    layer?: WMTSLayerProperties;
    /**
     * The [WMTSStyle](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSStyle.html) to request.Defaults to the id of the first item in [styles](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#styles).Should be one of the supported [styles](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#styles).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#styleId)
     */
    styleId?: string;
    /**
     * A collection of supported [WMTSStyle](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSStyle.html)s as retrieved from the GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#styles)
     */
    styles?: CollectionProperties<WMTSStyleProperties>;
    /**
     * The [TileMatrixSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileMatrixSet.html) to request.Defaults to the first item in [tileMatrixSets](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#tileMatrixSet) that matches the spatialReference of the view.Must be one of the supported [tileMatrixSets](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#tileMatrixSet).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#tileMatrixSet)
     */
    tileMatrixSet?: TileMatrixSetProperties;
    /**
     * The id of the [TileMatrixSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileMatrixSet.html) to request.Defaults to the id of the first item in [tileMatrixSets](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#tileMatrixSet) that matches the spatialReference of the view.Must be one of the supported [tileMatrixSets](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#tileMatrixSet).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#tileMatrixSetId)
     */
    tileMatrixSetId?: string;
    /**
     * A collection of supported [TileMatrixSets](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileMatrixSet.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#tileMatrixSets)
     */
    tileMatrixSets?: CollectionProperties<TileMatrixSetProperties>;
    /**
     * The title of the WMTS sublayer used to identify it in places such as the[LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) and [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widgets.This defaults to the value of the Title property from the WMTS GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#title)
     */
    title?: string;
  }

  interface TileLayer
    extends Layer,
      SublayersOwner,
      ArcGISMapService,
      ArcGISCachedService,
      RefreshableLayer,
      ScaleRangeLayer,
      PortalLayer {
    /**
     * A flat [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of all the [sublayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#sublayers)in the TileLayer including the sublayers of its sublayers.All sublayers are referenced in the order in which they are drawn in the view (bottom to top).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#allSublayers)
     */
    readonly allSublayers: Collection<Sublayer>;
    /**
     * The URL that points to the location of the layer's attribution data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#attributionDataUrl)
     */
    readonly attributionDataUrl: string;
    /**
     * Indicates if the layer has attribution data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#hasAttributionData)
     */
    readonly hasAttributionData: boolean;
    /**
     * Resampling is enabled by default in 2D [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) and 3D [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).This means that tile images are resampled at a lower level of detail and displayed at levelswhere tiles may not be available. Setting this property to `true` disables this behavior. Instead,if a tile is not available, a transparent image is displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#resampling)
     *
     * @default true
     */
    resampling: boolean;
    /**
     * A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of [Sublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html) objects.All sublayers are referenced in the order in which they are drawn in the view (bottom to top).Sublayer properties on TileLayer are read-only, with the following exceptions:  - [legendEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#legendEnabled)  - [popupEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#popupEnabled)  - [popupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#popupTemplate)  - [title](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#title)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#sublayers)
     */
    readonly sublayers: Collection<Sublayer>;
    /**
     * An array of tile servers used for changing map tiles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#tileServers)
     */
    tileServers: string[];
    /**
     * For [TileLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html) the type is `tile`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#type)
     */
    readonly type: "tile";
    /**
     * The URL of the REST endpoint of the layer. The URL may either point to aresource on ArcGIS Enterprise or ArcGIS Online.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#url)
     */
    url: string;

    /**
     * This method fetches a tile for the given level, row and column present in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#fetchTile)
     *
     * @param level Level of detail of the tile to fetch. This value is provided by [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
     * @param row The row(y) position of the tile fetch. This value is provided by [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
     * @param col The column(x) position of the tile to fetch. This value is provided by [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
     * @param options Optional settings for the tile request. The options have the following properties.
     * @param options.timestamp Number to append to the tile request to prevent fetching the tile from the browser cache.
     * @param options.signal [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) allows for cancelable requests.                                        If canceled, the promise will be rejected with an error named `AbortError`.                                        See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     */
    fetchTile(level: number, row: number, col: number, options?: TileLayerFetchTileOptions): IPromise<HTMLImageElement>;
    /**
     * This method returns a URL to a tile for a given level, row and column.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#getTileUrl)
     *
     * @param level The requested tile's level.
     * @param row The requested tile's row.
     * @param col The requested tile's column.
     *
     */
    getTileUrl(level: number, row: number, col: number): string;

    on(name: "layerview-create", eventHandler: TileLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: TileLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: TileLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface TileLayerConstructor {
    new (properties?: TileLayerProperties): TileLayer;

    fromJSON(json: any): TileLayer;
  }

  export const TileLayer: TileLayerConstructor;

  interface TileLayerProperties
    extends LayerProperties,
      ArcGISMapServiceProperties,
      ArcGISCachedServiceProperties,
      RefreshableLayerProperties,
      ScaleRangeLayerProperties,
      PortalLayerProperties {
    /**
     * Resampling is enabled by default in 2D [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) and 3D [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).This means that tile images are resampled at a lower level of detail and displayed at levelswhere tiles may not be available. Setting this property to `true` disables this behavior. Instead,if a tile is not available, a transparent image is displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#resampling)
     *
     * @default true
     */
    resampling?: boolean;
    /**
     * An array of tile servers used for changing map tiles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#tileServers)
     */
    tileServers?: string[];
    /**
     * The URL of the REST endpoint of the layer. The URL may either point to aresource on ArcGIS Enterprise or ArcGIS Online.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#url)
     */
    url?: string;
  }

  export interface TileLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface TileLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface TileLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  export interface TileLayerFetchTileOptions extends Object {
    /**
     * Number to append to the tile request to prevent fetching the tile from the browser cache.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#fetchTile)
     */
    timestamp?: boolean;
    /**
     * [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) allows for cancelable requests.                                        If canceled, the promise will be rejected with an error named `AbortError`.                                        See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#fetchTile)
     */
    signal?: AbortSignal;
  }

  interface UnknownLayer extends Layer {
    on(name: "layerview-create", eventHandler: UnknownLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: UnknownLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: UnknownLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface UnknownLayerConstructor {
    new (properties?: UnknownLayerProperties): UnknownLayer;
  }

  export const UnknownLayer: UnknownLayerConstructor;

  interface UnknownLayerProperties extends LayerProperties {}

  export interface UnknownLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface UnknownLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface UnknownLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface UnsupportedLayer extends Layer {
    on(name: "layerview-create", eventHandler: UnsupportedLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: UnsupportedLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: UnsupportedLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface UnsupportedLayerConstructor {
    new (properties?: UnsupportedLayerProperties): UnsupportedLayer;
  }

  export const UnsupportedLayer: UnsupportedLayerConstructor;

  interface UnsupportedLayerProperties extends LayerProperties {}

  export interface UnsupportedLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface UnsupportedLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface UnsupportedLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface VectorTileLayer extends Layer, ScaleRangeLayer {
    /**
     * The URL that points to the location of the layer's attribution data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#attributionDataUrl)
     */
    readonly attributionDataUrl: string;
    /**
     * Indicates the layer's supported capabilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#capabilities)
     */
    readonly capabilities: VectorTileLayerCapabilities;
    /**
     * The current style information of the VectorTileLayer. See the object specification below.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#currentStyleInfo)
     */
    readonly currentStyleInfo: VectorTileLayerCurrentStyleInfo;
    /**
     * The portal item from which the layer is loaded. This will load the layerfrom the portal item, not the vector tile service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#portalItem)
     */
    portalItem: PortalItem;
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#spatialReference)
     */
    spatialReference: SpatialReference;
    /**
     * A style JSON object of vector tiles that will be used to render the layer.If initializing the layer with a style JSON object, the tiles are fetchedfrom the tile servers specified in the style object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#style)
     */
    style: any;
    /**
     * The tiling scheme information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#tileInfo)
     */
    tileInfo: TileInfo;
    /**
     * The URL to the vector tile service, or the URL to the style resource of vector tiles thatwill be used to render the layer. If specifying a URL to a style, the tiles are fetchedfrom the tile servers specified in the style object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#url)
     */
    url: string;

    /**
     * Returns an instance of [layout](https://www.mapbox.com/mapbox-gl-js/style-spec/#layer-layout)properties for the specified [style-layer](https://www.mapbox.com/mapbox-gl-js/style-spec/#layers).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#getLayoutProperties)
     *
     * @param layer The style-layer [id](https://www.mapbox.com/mapbox-gl-js/style-spec/#layer-id)in the VectorTileLayer's [currentStyleInfo.style](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#currentStyleInfo).
     *
     */
    getLayoutProperties(layer: string): any;
    /**
     * Returns an instance of [paint](https://www.mapbox.com/mapbox-gl-js/style-spec/#layer-paint) properties for the specified[style-layer](https://www.mapbox.com/mapbox-gl-js/style-spec/#layers).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#getPaintProperties)
     *
     * @param layer The style-layer [id](https://www.mapbox.com/mapbox-gl-js/style-spec/#layer-id)in the VectorTileLayer's [currentStyleInfo.style](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#currentStyleInfo).
     *
     */
    getPaintProperties(layer: string): any;
    /**
     * Returns the [id](https://www.mapbox.com/mapbox-gl-js/style-spec/#layer-id)of the [style-layer](https://www.mapbox.com/mapbox-gl-js/style-spec/#layers)based on its index.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#getStyleLayerId)
     *
     * @param index Index of the style-layer in the VectorTileLayer's [currentStyleInfo.style](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#currentStyleInfo).
     *
     */
    getStyleLayerId(index: number): string;
    /**
     * Loads a style to render a layer from the specified URL to a style resource or style JSON object. It isequivalent of changing the entire CSS style sheet for web page. When loading a style, it is the developer'sresponsibility to make sure that any relative urls in the style resolve correctly.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#loadStyle)
     *
     * @param style The URL to a style of vector tiles or style JSON object.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    loadStyle(style: string | any, options?: VectorTileLayerLoadStyleOptions): IPromise<any>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#setLayoutProperties)
     *
     * @param layer The style-layer [id](https://www.mapbox.com/mapbox-gl-js/style-spec/#layer-id)in the VectorTileLayer's [currentStyleInfo.style](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#currentStyleInfo).
     * @param layout An instance of layout properties to assign to the style-layer.
     *
     */
    setLayoutProperties(layer: string, layout: any): void;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#setPaintProperties)
     *
     * @param layer The style-layer [id](https://www.mapbox.com/mapbox-gl-js/style-spec/#layer-id)in the VectorTileLayer's [currentStyleInfo.style](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#currentStyleInfo).
     * @param painter An instance of paint properties to assign to the specified style-layer.
     *
     */
    setPaintProperties(layer: string, painter: any): void;

    on(name: "layerview-create", eventHandler: VectorTileLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: VectorTileLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: VectorTileLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface VectorTileLayerConstructor {
    new (properties?: VectorTileLayerProperties): VectorTileLayer;

    fromJSON(json: any): VectorTileLayer;
  }

  export const VectorTileLayer: VectorTileLayerConstructor;

  interface VectorTileLayerProperties extends LayerProperties, ScaleRangeLayerProperties {
    /**
     * The portal item from which the layer is loaded. This will load the layerfrom the portal item, not the vector tile service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#portalItem)
     */
    portalItem?: PortalItemProperties;
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * A style JSON object of vector tiles that will be used to render the layer.If initializing the layer with a style JSON object, the tiles are fetchedfrom the tile servers specified in the style object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#style)
     */
    style?: any;
    /**
     * The tiling scheme information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#tileInfo)
     */
    tileInfo?: TileInfoProperties;
    /**
     * The URL to the vector tile service, or the URL to the style resource of vector tiles thatwill be used to render the layer. If specifying a URL to a style, the tiles are fetchedfrom the tile servers specified in the style object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#url)
     */
    url?: string;
  }

  export interface VectorTileLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface VectorTileLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface VectorTileLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  export interface VectorTileLayerCapabilities extends Object {
    /**
     * Indicates options supported by the exportTiles operation. Will be `null` if the `supportsExportTiles` is `false`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#capabilities)
     */
    exportTiles: any;

    exportMap: VectorTileLayerCapabilitiesExportMap;
    /**
     * Indicates operations that can be performed on the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#capabilities)
     */
    operations: VectorTileLayerCapabilitiesOperations;
  }

  export interface VectorTileLayerCapabilitiesExportMap extends Object {
    /**
     * Specifies the maximum number of tiles that can be exported to a cache dataset or a tile package.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#capabilities)
     */
    maxExportTilesCount: number;
  }

  export interface VectorTileLayerCapabilitiesOperations extends Object {
    /**
     * Indicates if the tiles from the service can be exported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#capabilities)
     */
    supportsExportTiles: boolean;
    /**
     * Indicates if the service exposes a tile map that describes the presence of tiles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#capabilities)
     */
    supportsTileMap: boolean;
  }

  export interface VectorTileLayerCurrentStyleInfo extends Object {
    /**
     * Absolute URL for a vector tile service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#currentStyleInfo)
     */
    serviceUrl: string;
    /**
     * Absolute URL for vector tile service style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#currentStyleInfo)
     */
    styleUrl: string;
    /**
     * Absolute URL for sprites included in a style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#currentStyleInfo)
     */
    spriteUrl: string;
    /**
     * Absolute template URL for font sets included in a style. The URL includes `{fontstack}` and `{range}` tokens.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#currentStyleInfo)
     */
    glyphsUrl: string;
    /**
     * Style JSON object for vector tiles. Style object includes `version` of the style specification,`sprite` and `glyphs` properties. It adheres to [version 8 of the Mapbox GL style specification](https://www.mapbox.com/mapbox-gl-js/style-spec/).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#currentStyleInfo)
     */
    style: any;
    /**
     * Vector tile service information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#currentStyleInfo)
     */
    layerDefinition: any;
  }

  export interface VectorTileLayerLoadStyleOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#loadStyle)
     */
    signal?: AbortSignal;
  }

  interface WebTileLayer extends Layer, ScaleRangeLayer, RefreshableLayer {
    /**
     * The attribution information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#copyright)
     */
    copyright: string;
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#spatialReference)
     *
     * @default Web Mercator Auxiliary Sphere (wkid: 3857)
     */
    readonly spatialReference: SpatialReference;
    /**
     * A string of subDomain names where tiles are served to speed up tile retrieval.If subDomains are specified, the [urlTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#urlTemplate) should include a`{subDomain}` place holder.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#subDomains)
     */
    subDomains: string[];
    /**
     * The tiling scheme information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#tileInfo)
     */
    tileInfo: TileInfo;
    /**
     * The list of tile server urls for the layer.It's computed from the [urlTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#urlTemplate) and the list of [subDomains](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#subDomains)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#tileServers)
     */
    readonly tileServers: string[];
    /**
     * For [WebTileLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html) the type is `web-tile`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#type)
     */
    readonly type: "web-tile";
    /**
     * URL template for the hosted tiles. The `urlTemplate` should contain a `{subDomain}` placeholder if [subDomains](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#subDomains) are specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#urlTemplate)
     */
    urlTemplate: string;

    /**
     * This method fetches a tile for the given level, row and column present in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#fetchTile)
     *
     * @param level Level of detail of the tile to fetch. This value is provided by [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
     * @param row The row(y) position of the tile fetch. This value is provided by [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
     * @param column The column(x) position of the tile to fetch. This value is provided by [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
     * @param options Optional settings for the tile request. The options have the following properties.
     * @param options.timestamp A timestamp to append to the tile url to avoid loading a cached version of the tile.
     * @param options.signal [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) allows for cancelable requests.                                        If canceled, the promise will be rejected with an error named `AbortError`.                                        See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     */
    fetchTile(
      level: number,
      row: number,
      column: number,
      options?: WebTileLayerFetchTileOptions
    ): IPromise<HTMLImageElement>;
    /**
     * This method returns a URL to a tile for a given level, row and column.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#getTileUrl)
     *
     * @param level The requested tile's level.
     * @param row The requested tile's row.
     * @param column The requested tile's column.
     *
     */
    getTileUrl(level: number, row: number, column: number): string;

    on(name: "layerview-create", eventHandler: WebTileLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: WebTileLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: WebTileLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface WebTileLayerConstructor {
    new (properties?: WebTileLayerProperties): WebTileLayer;
  }

  export const WebTileLayer: WebTileLayerConstructor;

  interface WebTileLayerProperties extends LayerProperties, ScaleRangeLayerProperties, RefreshableLayerProperties {
    /**
     * The attribution information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#copyright)
     */
    copyright?: string;
    /**
     * A string of subDomain names where tiles are served to speed up tile retrieval.If subDomains are specified, the [urlTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#urlTemplate) should include a`{subDomain}` place holder.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#subDomains)
     */
    subDomains?: string[];
    /**
     * The tiling scheme information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#tileInfo)
     */
    tileInfo?: TileInfoProperties;
    /**
     * URL template for the hosted tiles. The `urlTemplate` should contain a `{subDomain}` placeholder if [subDomains](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#subDomains) are specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#urlTemplate)
     */
    urlTemplate?: string;
  }

  export interface WebTileLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface WebTileLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface WebTileLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  export interface WebTileLayerFetchTileOptions extends Object {
    /**
     * A timestamp to append to the tile url to avoid loading a cached version of the tile.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#fetchTile)
     */
    timestamp?: boolean;
    /**
     * [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) allows for cancelable requests.                                        If canceled, the promise will be rejected with an error named `AbortError`.                                        See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#fetchTile)
     */
    signal?: AbortSignal;
  }

  interface WMSLayer extends Layer, PortalLayer, ScaleRangeLayer, RefreshableLayer {
    /**
     * Copyright information for the WMS service.This defaults to the value of the AccessConstraints property from the GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#copyright)
     */
    copyright: string;
    /**
     * Use this to append different custom parameters to the WMS map requests.The custom layer parameters are applied to GetMap and GetFeatureInfo.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#customLayerParameters)
     */
    customLayerParameters: any;
    /**
     * Use this to append custom parameters to all WMS requests.The custom parameters are applied to GetCapabilities, GetMap and GetFeatureInfo.For example, if an access key is required, the key can be configured as a custom parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#customParameters)
     */
    customParameters: any;
    /**
     * Description for the WMS layer.This defaults to the value of the Abstract property from the WMS GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#description)
     */
    description: string;
    /**
     * Return format of feature information (MIME type).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#featureInfoFormat)
     */
    featureInfoFormat: string;
    /**
     * The URL for the WMS GetFeatureInfo call.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#featureInfoUrl)
     */
    featureInfoUrl: string;
    /**
     * All bounding boxes defined for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#fullExtents)
     */
    fullExtents: Extent[];
    /**
     * The map image format (MIME type) to request.Defaults to `image/png` if the WMS service supports it.If not, it defaults to the value of the first `<Format>` in `<GetMap>` in the GetCapabilities response.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#imageFormat)
     */
    imageFormat: string;
    /**
     * Indicates the maximum height of the image exported by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#imageMaxHeight)
     *
     * @default 2048
     */
    imageMaxHeight: number;
    /**
     * Indicates the maximum height of the image exported by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#imageMaxWidth)
     *
     * @default 2048
     */
    imageMaxWidth: number;
    /**
     * Indicates whether the background of the image exported by the service is transparent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#imageTransparency)
     *
     * @default true
     */
    imageTransparency: boolean;
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled: boolean;
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#spatialReference)
     */
    spatialReference: SpatialReference;
    /**
     * List of spatialReference well known ids derived from the CRS elements of the first layer in the GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#spatialReferences)
     */
    spatialReferences: number[];
    /**
     * A collection of [WMSSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html)s.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#sublayers)
     */
    sublayers: Collection<WMSSublayer>;
    /**
     * The URL of the WMS service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#url)
     */
    url: string;
    /**
     * Version of the [WMS specification](http://www.opengeospatial.org/standards/wms) to use.For example, `1.3.0`, `1.1.1`, `1.1` or `1.0`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#version)
     */
    version: string;

    /**
     * Fetching the WMS image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#fetchImage)
     *
     * @param extent The extent of the view.
     * @param width The width of the view in pixels.
     * @param height The height of the view in pixels.
     * @param options The parameter options is an object with the following properties.
     * @param options.pixelRatio The ratio of the resolution in physical pixels of the image to the resolution it will be displayed at.
     * @param options.rotation The rotation in degrees of the exported image.
     * @param options.signal An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     */
    fetchImage(extent: Extent, width: number, height: number, options?: WMSLayerFetchImageOptions): IPromise<any>;
    /**
     * Returns a [WMSSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html) based on the given sublayer id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#findSublayerById)
     *
     * @param id The [id](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#id) of the WMS sublayer.
     *
     */
    findSublayerById(id: number): WMSSublayer;

    on(name: "layerview-create", eventHandler: WMSLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: WMSLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: WMSLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface WMSLayerConstructor {
    new (properties?: WMSLayerProperties): WMSLayer;

    fromJSON(json: any): WMSLayer;
  }

  export const WMSLayer: WMSLayerConstructor;

  interface WMSLayerProperties
    extends LayerProperties,
      PortalLayerProperties,
      ScaleRangeLayerProperties,
      RefreshableLayerProperties {
    /**
     * Copyright information for the WMS service.This defaults to the value of the AccessConstraints property from the GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#copyright)
     */
    copyright?: string;
    /**
     * Use this to append different custom parameters to the WMS map requests.The custom layer parameters are applied to GetMap and GetFeatureInfo.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#customLayerParameters)
     */
    customLayerParameters?: any;
    /**
     * Use this to append custom parameters to all WMS requests.The custom parameters are applied to GetCapabilities, GetMap and GetFeatureInfo.For example, if an access key is required, the key can be configured as a custom parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#customParameters)
     */
    customParameters?: any;
    /**
     * Description for the WMS layer.This defaults to the value of the Abstract property from the WMS GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#description)
     */
    description?: string;
    /**
     * Return format of feature information (MIME type).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#featureInfoFormat)
     */
    featureInfoFormat?: string;
    /**
     * The URL for the WMS GetFeatureInfo call.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#featureInfoUrl)
     */
    featureInfoUrl?: string;
    /**
     * All bounding boxes defined for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#fullExtents)
     */
    fullExtents?: ExtentProperties[];
    /**
     * The map image format (MIME type) to request.Defaults to `image/png` if the WMS service supports it.If not, it defaults to the value of the first `<Format>` in `<GetMap>` in the GetCapabilities response.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#imageFormat)
     */
    imageFormat?: string;
    /**
     * Indicates the maximum height of the image exported by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#imageMaxHeight)
     *
     * @default 2048
     */
    imageMaxHeight?: number;
    /**
     * Indicates the maximum height of the image exported by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#imageMaxWidth)
     *
     * @default 2048
     */
    imageMaxWidth?: number;
    /**
     * Indicates whether the background of the image exported by the service is transparent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#imageTransparency)
     *
     * @default true
     */
    imageTransparency?: boolean;
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled?: boolean;
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * List of spatialReference well known ids derived from the CRS elements of the first layer in the GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#spatialReferences)
     */
    spatialReferences?: number[];
    /**
     * A collection of [WMSSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html)s.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#sublayers)
     */
    sublayers?: CollectionProperties<WMSSublayerProperties>;
    /**
     * The URL of the WMS service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#url)
     */
    url?: string;
    /**
     * Version of the [WMS specification](http://www.opengeospatial.org/standards/wms) to use.For example, `1.3.0`, `1.1.1`, `1.1` or `1.0`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#version)
     */
    version?: string;
  }

  export interface WMSLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface WMSLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface WMSLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  export interface WMSLayerFetchImageOptions extends Object {
    /**
     * The ratio of the resolution in physical pixels of the image to the resolution it will be displayed at.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#fetchImage)
     */
    pixelRatio?: number;
    /**
     * The rotation in degrees of the exported image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#fetchImage)
     */
    rotation?: number;
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#fetchImage)
     */
    signal?: AbortSignal;
  }

  interface WMTSLayer extends Layer, PortalLayer, ScaleRangeLayer, RefreshableLayer {
    /**
     * Currently active sublayer. Defaults to the first sublayer in [sublayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#sublayers).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#activeLayer)
     */
    activeLayer: WMTSSublayer;
    /**
     * Copyright information for the WMTS service.This defaults to the value of the AccessConstraints property from the GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#copyright)
     */
    copyright: string;
    /**
     * Use this to append different custom parameters to the WMTS tile requests.The custom layer parameters are applied to GetTile.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#customLayerParameters)
     */
    customLayerParameters: any;
    /**
     * Use this to append custom parameters to all WMTS requests.The custom parameters are applied to GetCapabilities and GetTile.For example, if an access key is required, the key can be configured as a custom parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#customParameters)
     */
    customParameters: any;
    /**
     * The service mode for the WMTS layer.If not specified, the API will first make a getCapabilities request using `RESTful`.If that fails, it will try using `KVP`.**Possible Values:** RESTful | KVP
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#serviceMode)
     *
     * @default RESTful
     */
    serviceMode: string;
    /**
     * A collection of [WMTSSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html) objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#sublayers)
     */
    sublayers: Collection<WMTSSublayer>;
    /**
     * The URL of the WMTS service.The URL for the GetCapabilities is created based on the url and serviceMode properties.For example https://gibs.earthdata.nasa.gov/wmts/epsg4326/best.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#url)
     */
    url: string;
    /**
     * Version of the [WMTS specification](http://www.opengeospatial.org/standards/wmts) to use.Probably `1.0.0`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#version)
     */
    version: string;

    /**
     * Returns a [WMTSSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html) based on the given sublayer id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#findSublayerById)
     *
     * @param id The [id](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html#id) of the WMTS sublayer.
     *
     */
    findSublayerById(id: string): WMTSSublayer;

    on(name: "layerview-create", eventHandler: WMTSLayerLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: WMTSLayerLayerviewCreateErrorEventHandler): IHandle;

    on(name: "layerview-destroy", eventHandler: WMTSLayerLayerviewDestroyEventHandler): IHandle;
  }

  interface WMTSLayerConstructor {
    new (properties?: WMTSLayerProperties): WMTSLayer;

    fromJSON(json: any): WMTSLayer;
  }

  export const WMTSLayer: WMTSLayerConstructor;

  interface WMTSLayerProperties
    extends LayerProperties,
      PortalLayerProperties,
      ScaleRangeLayerProperties,
      RefreshableLayerProperties {
    /**
     * Currently active sublayer. Defaults to the first sublayer in [sublayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#sublayers).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#activeLayer)
     */
    activeLayer?: WMTSSublayerProperties;
    /**
     * Copyright information for the WMTS service.This defaults to the value of the AccessConstraints property from the GetCapabilities request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#copyright)
     */
    copyright?: string;
    /**
     * Use this to append different custom parameters to the WMTS tile requests.The custom layer parameters are applied to GetTile.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#customLayerParameters)
     */
    customLayerParameters?: any;
    /**
     * Use this to append custom parameters to all WMTS requests.The custom parameters are applied to GetCapabilities and GetTile.For example, if an access key is required, the key can be configured as a custom parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#customParameters)
     */
    customParameters?: any;
    /**
     * The service mode for the WMTS layer.If not specified, the API will first make a getCapabilities request using `RESTful`.If that fails, it will try using `KVP`.**Possible Values:** RESTful | KVP
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#serviceMode)
     *
     * @default RESTful
     */
    serviceMode?: string;
    /**
     * A collection of [WMTSSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html) objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#sublayers)
     */
    sublayers?: CollectionProperties<WMTSSublayerProperties>;
    /**
     * The URL of the WMTS service.The URL for the GetCapabilities is created based on the url and serviceMode properties.For example https://gibs.earthdata.nasa.gov/wmts/epsg4326/best.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#url)
     */
    url?: string;
    /**
     * Version of the [WMTS specification](http://www.opengeospatial.org/standards/wmts) to use.Probably `1.0.0`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#version)
     */
    version?: string;
  }

  export interface WMTSLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface WMTSLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface WMTSLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface Map extends Accessor, LayersMixin {
    /**
     * A flat collection of all the [layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) in the map.This collection contains [basemap layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap), [operational layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#layers)and [ground layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#ground). [Group Layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html) and their[children layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html#layers) are alsopart of this collection. Reference layers in the basemap will always be includedat the end of the collection.Layers should not be added directly to this collection. They must only be added via the[layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#layers), [basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or [ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#ground) properties.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#allLayers)
     */
    readonly allLayers: Collection<Layer>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap)
     */
    basemap: Basemap;
    /**
     * Specifies the surface properties for the map. This property is only relevantwhen adding the map to a 3D [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). It renders theterrain or topographical variations in the real world on the map's surfacewith a collection of [ElevationLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html).This value can be an instance of [Ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html), or one of the following strings:- `world-elevation` for a default instance of ground using the  [Terrain3D Service](https://www.arcgis.com/home/item.html?id=7029fb60158543ad845c7e1527af11e4).- `world-topobathymetry` for an instance of ground that combines surface elevation and bathymetry using the  [TopoBathy3D Service](https://www.arcgis.com/home/item.html?id=0c69ba5a5d254118841d43f03aa3e97d).The ground may not be set to `null` or `undefined`, it is guaranteed to alwayscontain an instance of type [Ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html). The elevation can be removed from the groundby setting the ground property to a new empty [Ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html) instance or by removing allthe ground layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#ground)
     */
    ground: Ground;
  }

  interface MapConstructor {
    new (properties?: MapProperties): Map;
  }

  export const Map: MapConstructor;

  interface MapProperties extends LayersMixinProperties {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap)
     */
    basemap?: BasemapProperties | string;
    /**
     * Specifies the surface properties for the map. This property is only relevantwhen adding the map to a 3D [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). It renders theterrain or topographical variations in the real world on the map's surfacewith a collection of [ElevationLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html).This value can be an instance of [Ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html), or one of the following strings:- `world-elevation` for a default instance of ground using the  [Terrain3D Service](https://www.arcgis.com/home/item.html?id=7029fb60158543ad845c7e1527af11e4).- `world-topobathymetry` for an instance of ground that combines surface elevation and bathymetry using the  [TopoBathy3D Service](https://www.arcgis.com/home/item.html?id=0c69ba5a5d254118841d43f03aa3e97d).The ground may not be set to `null` or `undefined`, it is guaranteed to alwayscontain an instance of type [Ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html). The elevation can be removed from the groundby setting the ground property to a new empty [Ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html) instance or by removing allthe ground layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#ground)
     */
    ground?: GroundProperties | string;
  }

  namespace pointCloudRenderers {
    /**
     * Renderer types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-pointCloudRenderers.html#PointCloudRenderer)
     */
    export type PointCloudRenderer =
      | __esri.PointCloudClassBreaksRenderer
      | __esri.PointCloudRGBRenderer
      | __esri.PointCloudStretchRenderer
      | __esri.PointCloudUniqueValueRenderer;

    /**
     * PointCloudClassBreaksRenderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-pointCloudRenderers.html#PointCloudClassBreaksRenderer)
     */
    export type PointCloudClassBreaksRenderer = __esri.PointCloudClassBreaksRenderer;
    export const PointCloudClassBreaksRenderer: typeof __esri.PointCloudClassBreaksRenderer;

    /**
     * PointCloudRGBRenderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-pointCloudRenderers.html#PointCloudRGBRenderer)
     */
    export type PointCloudRGBRenderer = __esri.PointCloudRGBRenderer;
    export const PointCloudRGBRenderer: typeof __esri.PointCloudRGBRenderer;

    /**
     * PointCloudStretchRenderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-pointCloudRenderers.html#PointCloudStretchRenderer)
     */
    export type PointCloudStretchRenderer = __esri.PointCloudStretchRenderer;
    export const PointCloudStretchRenderer: typeof __esri.PointCloudStretchRenderer;

    /**
     * PointCloudUniqueValueRenderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-pointCloudRenderers.html#PointCloudUniqueValueRenderer)
     */
    export type PointCloudUniqueValueRenderer = __esri.PointCloudUniqueValueRenderer;
    export const PointCloudUniqueValueRenderer: typeof __esri.PointCloudUniqueValueRenderer;
  }

  /**
   * PointCloudClassBreaksRenderer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-pointCloudRenderers.html#PointCloudClassBreaksRenderer)
   */
  export type pointCloudRenderersPointCloudClassBreaksRenderer = PointCloudClassBreaksRenderer;

  /**
   * Renderer types.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-pointCloudRenderers.html#PointCloudRenderer)
   */
  export type pointCloudRenderersPointCloudRenderer =
    | PointCloudClassBreaksRenderer
    | PointCloudRGBRenderer
    | PointCloudStretchRenderer
    | PointCloudUniqueValueRenderer;

  /**
   * PointCloudRGBRenderer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-pointCloudRenderers.html#PointCloudRGBRenderer)
   */
  export type pointCloudRenderersPointCloudRGBRenderer = PointCloudRGBRenderer;

  /**
   * PointCloudStretchRenderer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-pointCloudRenderers.html#PointCloudStretchRenderer)
   */
  export type pointCloudRenderersPointCloudStretchRenderer = PointCloudStretchRenderer;

  /**
   * PointCloudUniqueValueRenderer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-pointCloudRenderers.html#PointCloudUniqueValueRenderer)
   */
  export type pointCloudRenderersPointCloudUniqueValueRenderer = PointCloudUniqueValueRenderer;

  namespace content {
    /**
     * Popup content element types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content.html#Content)
     */
    export type Content = __esri.TextContent | __esri.MediaContent | __esri.FieldsContent | __esri.AttachmentsContent;

    /**
     * TextContent defines descriptive text as an element within the [PopupTemplate's](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html)content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content.html#TextContent)
     */
    export type TextContent = __esri.TextContent;
    export const TextContent: typeof __esri.TextContent;

    /**
     * MediaContent contains an individual or array of chart and/or image media elementsto display within a popup's content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content.html#MediaContent)
     */
    export type MediaContent = __esri.MediaContent;
    export const MediaContent: typeof __esri.MediaContent;

    /**
     * FieldsContent represents the [FieldInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html) associated with afeature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content.html#FieldsContent)
     */
    export type FieldsContent = __esri.FieldsContent;
    export const FieldsContent: typeof __esri.FieldsContent;

    /**
     * AttachmentsContent represents an attachment element associated with afeature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content.html#AttachmentsContent)
     */
    export type AttachmentsContent = __esri.AttachmentsContent;
    export const AttachmentsContent: typeof __esri.AttachmentsContent;
  }

  interface AttachmentsContent extends Content, JSONSupport {
    /**
     * An array of [AttachmentInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html) objects used todisplay within the popup's content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-AttachmentsContent.html#attachmentInfos)
     */
    attachmentInfos: AttachmentInfo;
    /**
     * A string value indicating how to display the attachment.Possible values are:preview | listIf `list` is specified, attachments show as links.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-AttachmentsContent.html#displayType)
     */
    displayType: "preview" | "list";
  }

  interface AttachmentsContentConstructor {
    new (properties?: AttachmentsContentProperties): AttachmentsContent;

    fromJSON(json: any): AttachmentsContent;
  }

  export const AttachmentsContent: AttachmentsContentConstructor;

  interface AttachmentsContentProperties extends ContentProperties {
    /**
     * An array of [AttachmentInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html) objects used todisplay within the popup's content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-AttachmentsContent.html#attachmentInfos)
     */
    attachmentInfos?: AttachmentInfoProperties;
    /**
     * A string value indicating how to display the attachment.Possible values are:preview | listIf `list` is specified, attachments show as links.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-AttachmentsContent.html#displayType)
     */
    displayType?: "preview" | "list";
  }

  interface BarChartMediaInfo extends JSONSupport, MediaInfo, ChartMediaInfo {
    /**
     * Indicates the type of chart.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-BarChartMediaInfo.html#type)
     *
     * @default bar-chart
     */
    readonly type: string;

    /**
     * Creates a deep clone of the BarChartMediaInfo class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-BarChartMediaInfo.html#clone)
     *
     *
     */
    clone(): BarChartMediaInfo;
  }

  interface BarChartMediaInfoConstructor {
    new (properties?: BarChartMediaInfoProperties): BarChartMediaInfo;

    fromJSON(json: any): BarChartMediaInfo;
  }

  export const BarChartMediaInfo: BarChartMediaInfoConstructor;

  interface BarChartMediaInfoProperties extends MediaInfoProperties, ChartMediaInfoProperties {}

  interface ColumnChartMediaInfo extends JSONSupport, MediaInfo, ChartMediaInfo {
    /**
     * Indicates the type of chart.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-ColumnChartMediaInfo.html#type)
     *
     * @default column-chart
     */
    readonly type: string;

    /**
     * Creates a deep clone of the ColumnChartMediaInfo class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-ColumnChartMediaInfo.html#clone)
     *
     *
     */
    clone(): ColumnChartMediaInfo;
  }

  interface ColumnChartMediaInfoConstructor {
    new (properties?: ColumnChartMediaInfoProperties): ColumnChartMediaInfo;

    fromJSON(json: any): ColumnChartMediaInfo;
  }

  export const ColumnChartMediaInfo: ColumnChartMediaInfoConstructor;

  interface ColumnChartMediaInfoProperties extends MediaInfoProperties, ChartMediaInfoProperties {}

  interface Content extends Accessor, JSONSupport {
    /**
     * The type of popup element displayed.**Possible values**: text | fields | media | attachments
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-Content.html#type)
     */
    readonly type: string;
  }

  interface ContentConstructor {
    new (properties?: ContentProperties): Content;

    fromJSON(json: any): Content;
  }

  export const Content: ContentConstructor;

  interface ContentProperties {}

  interface FieldsContent extends Content, JSONSupport {
    /**
     * Array of [fieldInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html).If the `fieldInfos` property is not provided directly within the content,the popup will display whatever is set in the [PopupTemplate.fieldInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#fieldInfos).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html#fieldInfos)
     */
    fieldInfos: FieldInfo[];

    /**
     * Creates a deep clone of the FieldsContent class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html#clone)
     *
     *
     */
    clone(): FieldsContent;
  }

  interface FieldsContentConstructor {
    new (properties?: FieldsContentProperties): FieldsContent;

    fromJSON(json: any): FieldsContent;
  }

  export const FieldsContent: FieldsContentConstructor;

  interface FieldsContentProperties extends ContentProperties {
    /**
     * Array of [fieldInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html).If the `fieldInfos` property is not provided directly within the content,the popup will display whatever is set in the [PopupTemplate.fieldInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#fieldInfos).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html#fieldInfos)
     */
    fieldInfos?: FieldInfoProperties[];
  }

  interface ImageMediaInfo extends JSONSupport, MediaInfo {
    /**
     * Refresh interval of the layer in minutes. Non-zero value indicates automatic layer refreshat the specified interval. Value of `0` indicates auto refresh is not enabled.If the property does not exist, it is equivalent to having a value of `0`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-ImageMediaInfo.html#refreshInterval)
     */
    refreshInterval: number;
    /**
     * The type of popup element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-ImageMediaInfo.html#type)
     *
     * @default image
     */
    readonly type: string;
    /**
     * Defines the value format of the image media element and how the images should be retrieved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-ImageMediaInfo.html#value)
     */
    value: ImageMediaInfoValue;

    /**
     * Creates a deep clone of the ImageMediaInfo class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-ImageMediaInfo.html#clone)
     *
     *
     */
    clone(): ImageMediaInfo;
  }

  interface ImageMediaInfoConstructor {
    new (properties?: ImageMediaInfoProperties): ImageMediaInfo;

    fromJSON(json: any): ImageMediaInfo;
  }

  export const ImageMediaInfo: ImageMediaInfoConstructor;

  interface ImageMediaInfoProperties extends MediaInfoProperties {
    /**
     * Refresh interval of the layer in minutes. Non-zero value indicates automatic layer refreshat the specified interval. Value of `0` indicates auto refresh is not enabled.If the property does not exist, it is equivalent to having a value of `0`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-ImageMediaInfo.html#refreshInterval)
     */
    refreshInterval?: number;
    /**
     * Defines the value format of the image media element and how the images should be retrieved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-ImageMediaInfo.html#value)
     */
    value?: ImageMediaInfoValueProperties;
  }

  interface LineChartMediaInfo extends JSONSupport, MediaInfo, ChartMediaInfo {
    /**
     * Indicates the type of chart.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-LineChartMediaInfo.html#type)
     *
     * @default line-chart
     */
    readonly type: string;

    /**
     * Creates a deep clone of the LineChartMediaInfo class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-LineChartMediaInfo.html#clone)
     *
     *
     */
    clone(): LineChartMediaInfo;
  }

  interface LineChartMediaInfoConstructor {
    new (properties?: LineChartMediaInfoProperties): LineChartMediaInfo;

    fromJSON(json: any): LineChartMediaInfo;
  }

  export const LineChartMediaInfo: LineChartMediaInfoConstructor;

  interface LineChartMediaInfoProperties extends MediaInfoProperties, ChartMediaInfoProperties {}

  interface MediaContent extends Content, JSONSupport {
    /**
     * Contains the media elements representing images or charts to displaywithin the [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html). This can be an individualchart or image element, or an array containing a combination of any ofthese types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-MediaContent.html#mediaInfos)
     */
    mediaInfos:
      | BarChartMediaInfo
      | ColumnChartMediaInfo
      | ImageMediaInfo
      | LineChartMediaInfo
      | PieChartMediaInfo
      | any[];

    /**
     * Creates a deep clone of the MediaContent class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-MediaContent.html#clone)
     *
     *
     */
    clone(): MediaContent;
  }

  interface MediaContentConstructor {
    new (properties?: MediaContentProperties): MediaContent;

    fromJSON(json: any): MediaContent;
  }

  export const MediaContent: MediaContentConstructor;

  interface MediaContentProperties extends ContentProperties {
    /**
     * Contains the media elements representing images or charts to displaywithin the [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html). This can be an individualchart or image element, or an array containing a combination of any ofthese types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-MediaContent.html#mediaInfos)
     */
    mediaInfos?:
      | BarChartMediaInfoProperties
      | ColumnChartMediaInfoProperties
      | ImageMediaInfoProperties
      | LineChartMediaInfoProperties
      | PieChartMediaInfoProperties
      | any[];
  }

  interface ChartMediaInfo {
    /**
     * Defines the chart value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-mixins-ChartMediaInfo.html#value)
     */
    value: ChartMediaInfoValue;
  }

  interface ChartMediaInfoConstructor {
    new (): ChartMediaInfo;
  }

  export const ChartMediaInfo: ChartMediaInfoConstructor;

  interface ChartMediaInfoProperties {
    /**
     * Defines the chart value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-mixins-ChartMediaInfo.html#value)
     */
    value?: ChartMediaInfoValueProperties;
  }

  interface MediaInfo {
    /**
     * Defines a caption for the media.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-mixins-MediaInfo.html#caption)
     */
    caption: string;
    /**
     * The title of the media element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-mixins-MediaInfo.html#title)
     */
    title: string;
  }

  interface MediaInfoConstructor {
    new (): MediaInfo;
  }

  export const MediaInfo: MediaInfoConstructor;

  interface MediaInfoProperties {
    /**
     * Defines a caption for the media.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-mixins-MediaInfo.html#caption)
     */
    caption?: string;
    /**
     * The title of the media element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-mixins-MediaInfo.html#title)
     */
    title?: string;
  }

  interface PieChartMediaInfo extends JSONSupport, MediaInfo, ChartMediaInfo {
    /**
     * Indicates the type of chart.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-PieChartMediaInfo.html#type)
     *
     * @default pie-chart
     */
    readonly type: string;

    /**
     * Creates a deep clone of the PieChartMediaInfo class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-PieChartMediaInfo.html#clone)
     *
     *
     */
    clone(): PieChartMediaInfo;
  }

  interface PieChartMediaInfoConstructor {
    new (properties?: PieChartMediaInfoProperties): PieChartMediaInfo;

    fromJSON(json: any): PieChartMediaInfo;
  }

  export const PieChartMediaInfo: PieChartMediaInfoConstructor;

  interface PieChartMediaInfoProperties extends MediaInfoProperties, ChartMediaInfoProperties {}

  interface ChartMediaInfoValue extends Accessor, JSONSupport {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValue.html#fields)
     */
    fields: string[];
    /**
     * A string containing the name of a field. The values of all fields in thechart will be normalized (divided) by the value of this field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValue.html#normalizeField)
     */
    normalizeField: string;
    /**
     * An array of [ChartMediaInfoValueSeries](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValueSeries.html) objects which provideinformation of x/y data data that is plotted in a chart.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValue.html#series)
     */
    series: ChartMediaInfoValueSeries[];
    /**
     * String value indicating the tooltip for a chart specified from another field. This field isneeded when related records are not used.It is used for showing tooltips from another field in the same layer or related layer/table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValue.html#tooltipField)
     */
    tooltipField: string;
  }

  interface ChartMediaInfoValueConstructor {
    new (properties?: ChartMediaInfoValueProperties): ChartMediaInfoValue;

    fromJSON(json: any): ChartMediaInfoValue;
  }

  export const ChartMediaInfoValue: ChartMediaInfoValueConstructor;

  interface ChartMediaInfoValueProperties {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValue.html#fields)
     */
    fields?: string[];
    /**
     * A string containing the name of a field. The values of all fields in thechart will be normalized (divided) by the value of this field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValue.html#normalizeField)
     */
    normalizeField?: string;
    /**
     * An array of [ChartMediaInfoValueSeries](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValueSeries.html) objects which provideinformation of x/y data data that is plotted in a chart.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValue.html#series)
     */
    series?: ChartMediaInfoValueSeriesProperties[];
    /**
     * String value indicating the tooltip for a chart specified from another field. This field isneeded when related records are not used.It is used for showing tooltips from another field in the same layer or related layer/table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValue.html#tooltipField)
     */
    tooltipField?: string;
  }

  interface ChartMediaInfoValueSeries extends Accessor {
    /**
     * String value indicating the tooltip for a series.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValueSeries.html#tooltipField)
     */
    tooltipField: string;
    /**
     * Numerical value indicating the x-value for the chart series.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValueSeries.html#x)
     */
    x: number;
    /**
     * Numerical value indicating the y-value for the chart series.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValueSeries.html#y)
     */
    y: number;

    /**
     * Creates a deep clone of the ChartMediaInfoValueSeries class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValueSeries.html#clone)
     *
     *
     */
    clone(): ChartMediaInfoValueSeries;
  }

  interface ChartMediaInfoValueSeriesConstructor {
    new (properties?: ChartMediaInfoValueSeriesProperties): ChartMediaInfoValueSeries;
  }

  export const ChartMediaInfoValueSeries: ChartMediaInfoValueSeriesConstructor;

  interface ChartMediaInfoValueSeriesProperties {
    /**
     * String value indicating the tooltip for a series.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValueSeries.html#tooltipField)
     */
    tooltipField?: string;
    /**
     * Numerical value indicating the x-value for the chart series.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValueSeries.html#x)
     */
    x?: number;
    /**
     * Numerical value indicating the y-value for the chart series.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValueSeries.html#y)
     */
    y?: number;
  }

  interface ImageMediaInfoValue extends Accessor, JSONSupport {
    /**
     * A string containing a URL to be launched in a browser when a user clicks the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ImageMediaInfoValue.html#linkURL)
     */
    linkURL: string;
    /**
     * A string containing the URL to the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ImageMediaInfoValue.html#sourceURL)
     */
    sourceURL: string;

    /**
     * Creates a deep clone of the ImageMediaInfoValue class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ImageMediaInfoValue.html#clone)
     *
     *
     */
    clone(): ImageMediaInfoValue;
  }

  interface ImageMediaInfoValueConstructor {
    new (properties?: ImageMediaInfoValueProperties): ImageMediaInfoValue;

    fromJSON(json: any): ImageMediaInfoValue;
  }

  export const ImageMediaInfoValue: ImageMediaInfoValueConstructor;

  interface ImageMediaInfoValueProperties {
    /**
     * A string containing a URL to be launched in a browser when a user clicks the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ImageMediaInfoValue.html#linkURL)
     */
    linkURL?: string;
    /**
     * A string containing the URL to the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ImageMediaInfoValue.html#sourceURL)
     */
    sourceURL?: string;
  }

  interface TextContent extends Content, JSONSupport {
    /**
     * The formatted string content to display. This may contain a fieldname enclosed in `{}`, such as `{FIELDNAME}`, or an [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html)expression name, referenced as `{expression/EXPRESSIONNAME}`.Text content may also leverage HTML tags such as `<b></b>`,`<p></p>`, and `<table></table>` for formatting the look and feelof the content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-TextContent.html#text)
     */
    text: string;

    /**
     * Creates a deep clone of the TextContent class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-TextContent.html#clone)
     *
     *
     */
    clone(): TextContent;
  }

  interface TextContentConstructor {
    new (properties?: TextContentProperties): TextContent;

    fromJSON(json: any): TextContent;
  }

  export const TextContent: TextContentConstructor;

  interface TextContentProperties extends ContentProperties {
    /**
     * The formatted string content to display. This may contain a fieldname enclosed in `{}`, such as `{FIELDNAME}`, or an [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html)expression name, referenced as `{expression/EXPRESSIONNAME}`.Text content may also leverage HTML tags such as `<b></b>`,`<p></p>`, and `<table></table>` for formatting the look and feelof the content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-TextContent.html#text)
     */
    text?: string;
  }

  /**
   * AttachmentsContent represents an attachment element associated with afeature.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content.html#AttachmentsContent)
   */
  export type contentAttachmentsContent = AttachmentsContent;

  /**
   * Popup content element types.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content.html#Content)
   */
  export type contentContent = TextContent | MediaContent | FieldsContent | AttachmentsContent;

  /**
   * FieldsContent represents the [FieldInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html) associated with afeature.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content.html#FieldsContent)
   */
  export type contentFieldsContent = FieldsContent;

  /**
   * MediaContent contains an individual or array of chart and/or image media elementsto display within a popup's content.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content.html#MediaContent)
   */
  export type contentMediaContent = MediaContent;

  /**
   * TextContent defines descriptive text as an element within the [PopupTemplate's](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html)content.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content.html#TextContent)
   */
  export type contentTextContent = TextContent;

  interface ExpressionInfo extends Accessor, JSONSupport {
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression evaluating toeither a string, number, dictionary, or array. This expression can reference fieldvalues using the `$feature` global variable and perform mathematicalcalculations and logical evaluations at runtime.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-ExpressionInfo.html#expression)
     */
    expression: string;
    /**
     * The name of the expression. This is used to reference the value of thegiven `expression` in the popupTemplate's[content](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#content) property by wrappingit in curly braces and prefacing it with `expression/`(e.g. `{expression/expressionName}`).See the code snippets below for more examples.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-ExpressionInfo.html#name)
     */
    name: string;
    /**
     * Indicates the return type of the Arcade expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-ExpressionInfo.html#returnType)
     */
    returnType: string | number;
    /**
     * The title used to describe the value returned by the expression in thepopup. This will display if the value is referenced in a [FieldInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html) table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-ExpressionInfo.html#title)
     */
    title: string;

    /**
     * Creates a deep clone of the ExpressionInfo class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-ExpressionInfo.html#clone)
     *
     *
     */
    clone(): ExpressionInfo;
  }

  interface ExpressionInfoConstructor {
    new (properties?: ExpressionInfoProperties): ExpressionInfo;

    fromJSON(json: any): ExpressionInfo;
  }

  export const ExpressionInfo: ExpressionInfoConstructor;

  interface ExpressionInfoProperties {
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression evaluating toeither a string, number, dictionary, or array. This expression can reference fieldvalues using the `$feature` global variable and perform mathematicalcalculations and logical evaluations at runtime.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-ExpressionInfo.html#expression)
     */
    expression?: string;
    /**
     * The name of the expression. This is used to reference the value of thegiven `expression` in the popupTemplate's[content](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#content) property by wrappingit in curly braces and prefacing it with `expression/`(e.g. `{expression/expressionName}`).See the code snippets below for more examples.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-ExpressionInfo.html#name)
     */
    name?: string;
    /**
     * Indicates the return type of the Arcade expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-ExpressionInfo.html#returnType)
     */
    returnType?: string | number;
    /**
     * The title used to describe the value returned by the expression in thepopup. This will display if the value is referenced in a [FieldInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html) table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-ExpressionInfo.html#title)
     */
    title?: string;
  }

  interface FieldInfo extends Accessor, JSONSupport {
    /**
     * The field name as defined by  the service or the `name` of an [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html)expression. Arcade expression names are defined in the [expressionInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#expressionInfos) property.When referencing Arcade expressions, you must preface the name with `expression/`, such as`expression/percent-total`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#fieldName)
     */
    fieldName: string;
    /**
     * Class which provides formatting options for numerical or date fields and how they should display withina popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#format)
     */
    format: FieldInfoFormat;
    /**
     * A Boolean determining whether users can edit this field.This is not applicable to Arcade expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#isEditable)
     *
     * @default false
     */
    isEditable: boolean;
    /**
     * A string containing the field alias. Not applicable toArcade expressions as the title is used instead.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#label)
     */
    label: string;
    /**
     * Used in a `one:many` or `many:many` relationship to compute the statisticson the field to show in the popup. If the property is present,must be one of the following values:**Possible Values:** count | sum | min | max | avg | stddev | var
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#statisticType)
     */
    statisticType: string;
    /**
     * A string determining what type of input box editors seewhen editing the field. Applies only to string fields.This is not applicable to Arcade expressions. If this propertyis present, it must be one of the following values:**Possible Values:** rich-text | text-area | text-box
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#stringFieldOption)
     *
     * @default text-box
     */
    stringFieldOption: string;
    /**
     * A string providing an editing hint for editors of the field.This is not applicable to Arcade expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#tooltip)
     */
    tooltip: string;
    /**
     * Indicates whether the field is visible in the popup window.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#visible)
     *
     * @default true
     */
    visible: boolean;

    /**
     * Creates a deep clone of the FieldInfo class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#clone)
     *
     *
     */
    clone(): FieldInfo;
  }

  interface FieldInfoConstructor {
    new (properties?: FieldInfoProperties): FieldInfo;

    fromJSON(json: any): FieldInfo;
  }

  export const FieldInfo: FieldInfoConstructor;

  interface FieldInfoProperties {
    /**
     * The field name as defined by  the service or the `name` of an [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html)expression. Arcade expression names are defined in the [expressionInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#expressionInfos) property.When referencing Arcade expressions, you must preface the name with `expression/`, such as`expression/percent-total`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#fieldName)
     */
    fieldName?: string;
    /**
     * Class which provides formatting options for numerical or date fields and how they should display withina popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#format)
     */
    format?: FieldInfoFormatProperties;
    /**
     * A Boolean determining whether users can edit this field.This is not applicable to Arcade expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#isEditable)
     *
     * @default false
     */
    isEditable?: boolean;
    /**
     * A string containing the field alias. Not applicable toArcade expressions as the title is used instead.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#label)
     */
    label?: string;
    /**
     * Used in a `one:many` or `many:many` relationship to compute the statisticson the field to show in the popup. If the property is present,must be one of the following values:**Possible Values:** count | sum | min | max | avg | stddev | var
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#statisticType)
     */
    statisticType?: string;
    /**
     * A string determining what type of input box editors seewhen editing the field. Applies only to string fields.This is not applicable to Arcade expressions. If this propertyis present, it must be one of the following values:**Possible Values:** rich-text | text-area | text-box
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#stringFieldOption)
     *
     * @default text-box
     */
    stringFieldOption?: string;
    /**
     * A string providing an editing hint for editors of the field.This is not applicable to Arcade expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#tooltip)
     */
    tooltip?: string;
    /**
     * Indicates whether the field is visible in the popup window.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#visible)
     *
     * @default true
     */
    visible?: boolean;
  }

  interface LayerOptions extends Accessor, JSONSupport {
    /**
     * Applicable to [Imagery Layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html).Indicates whether or not only the topmost raster should be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-LayerOptions.html#returnTopmostRaster)
     *
     * @default false
     */
    returnTopmostRaster: boolean;
    /**
     * Applicable to [Imagery Layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html).Indicates whether records without data should display within the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-LayerOptions.html#showNoDataRecords)
     *
     * @default true
     */
    showNoDataRecords: boolean;

    /**
     * Creates a deep clone of the LayerOptions class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-LayerOptions.html#clone)
     *
     *
     */
    clone(): LayerOptions;
  }

  interface LayerOptionsConstructor {
    new (properties?: LayerOptionsProperties): LayerOptions;

    fromJSON(json: any): LayerOptions;
  }

  export const LayerOptions: LayerOptionsConstructor;

  interface LayerOptionsProperties {
    /**
     * Applicable to [Imagery Layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html).Indicates whether or not only the topmost raster should be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-LayerOptions.html#returnTopmostRaster)
     *
     * @default false
     */
    returnTopmostRaster?: boolean;
    /**
     * Applicable to [Imagery Layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html).Indicates whether records without data should display within the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-LayerOptions.html#showNoDataRecords)
     *
     * @default true
     */
    showNoDataRecords?: boolean;
  }

  interface RelatedRecordsInfo extends Accessor, JSONSupport {
    /**
     * An array of [RelatedRecordsInfoFieldOrder](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-RelatedRecordsInfoFieldOrder.html)objects indicating the field display order for the related recordsand whether they should be sorted in ascending `asc` or descending `desc` order.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-RelatedRecordsInfo.html#orderByFields)
     */
    orderByFields: RelatedRecordsInfoFieldOrder[];
    /**
     * Indicates whether to display related records in the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-RelatedRecordsInfo.html#showRelatedRecords)
     */
    showRelatedRecords: boolean;

    /**
     * Creates a deep clone of the RelatedRecordsInfo class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-RelatedRecordsInfo.html#clone)
     *
     *
     */
    clone(): RelatedRecordsInfo;
  }

  interface RelatedRecordsInfoConstructor {
    new (properties?: RelatedRecordsInfoProperties): RelatedRecordsInfo;

    fromJSON(json: any): RelatedRecordsInfo;
  }

  export const RelatedRecordsInfo: RelatedRecordsInfoConstructor;

  interface RelatedRecordsInfoProperties {
    /**
     * An array of [RelatedRecordsInfoFieldOrder](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-RelatedRecordsInfoFieldOrder.html)objects indicating the field display order for the related recordsand whether they should be sorted in ascending `asc` or descending `desc` order.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-RelatedRecordsInfo.html#orderByFields)
     */
    orderByFields?: RelatedRecordsInfoFieldOrderProperties[];
    /**
     * Indicates whether to display related records in the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-RelatedRecordsInfo.html#showRelatedRecords)
     */
    showRelatedRecords?: boolean;
  }

  interface FieldInfoFormat extends Accessor, JSONSupport {
    /**
     * Used only with `Date` fields. Specifieshow the date should appear in a popup.**Possible Values**| **Format** |**Date Formatting**  ||-------     | ----------------------  || **default**  | 12/31/1969, 19:00 || **short-date** | 12/31/1969   || **short-date-short-time** | 12/31/1969, 7:00 PM || **short-date-long-time** | 12/31/1969, 7:00:00 PM || **short-date-long-time-24** | 12/31/1969, 19:00:00 || **short-date-le** | 12/31/1969 || **short-date-le-short-time** | 12/31/1969, 7:00 PM || **short-date-le-short-time-24** | 12/31/1969, 19:00 || **short-date-le-long-time** | 12/31/1969, 7:00:00 PM || **short-date-le-long-time-24** | 12/31/1969, 19:00:0 || **long-month-day-year** | December 31, 1969 || **long-month-day-year-short-time** | December 31, 1969, 7:00 PM || **long-month-day-year-short-time-24** | December 31, 1969, 19:00 || **long-month-day-year-long-time** | December 31, 1969, 7:00:00 PM || **long-month-day-year-long-time-24** | December 31, 1969, 19:00:00 || **day-short-month-year** | Dec 31, 1969 || **day-short-month-year-short-time** | Dec 31, 1969, 7:00 PM || **day-short-month-year-short-time-24** | Dec 31, 1969, 19:00 || **day-short-month-year-long-time** | Dec 31, 1969, 7:00:00 PM || **day-short-month-year-long-time-24** | Dec 31, 1969, 19:00:00 || **long-date** | Wednesday, December 31, 1969 || **long-date-short-time** | Wednesday, December 31, 1969, 7:00 PM || **long-date-short-time-24** | Wednesday, December 31, 1969, 19:00 || **long-date-long-time** | Wednesday, December 31, 1969, 7:00:00 PM || **long-date-long-time-24** | Wednesday, December 31, 1969, 19:00:00 || **long-month-year** | December 1969 || **short-month-year** | Dec 1969 || **year** | 1969 |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-FieldInfoFormat.html#dateFormat)
     */
    dateFormat: string;
    /**
     * Used only with `Number` fields. A value of `true` indicates the numbershould have a digit (or thousands) separator when the value appears in popups.A value of `false` means that no separator will be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-FieldInfoFormat.html#digitSeparator)
     *
     * @default false
     */
    digitSeparator: boolean;
    /**
     * Used only with `Number` fields to specify the number of supported decimal placesthat should appear in popups. Any places beyond this value are rounded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-FieldInfoFormat.html#places)
     */
    places: number;

    /**
     * Creates a deep clone of the FieldInfoFormat class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-FieldInfoFormat.html#clone)
     *
     *
     */
    clone(): FieldInfoFormat;
  }

  interface FieldInfoFormatConstructor {
    new (properties?: FieldInfoFormatProperties): FieldInfoFormat;

    fromJSON(json: any): FieldInfoFormat;
  }

  export const FieldInfoFormat: FieldInfoFormatConstructor;

  interface FieldInfoFormatProperties {
    /**
     * Used only with `Date` fields. Specifieshow the date should appear in a popup.**Possible Values**| **Format** |**Date Formatting**  ||-------     | ----------------------  || **default**  | 12/31/1969, 19:00 || **short-date** | 12/31/1969   || **short-date-short-time** | 12/31/1969, 7:00 PM || **short-date-long-time** | 12/31/1969, 7:00:00 PM || **short-date-long-time-24** | 12/31/1969, 19:00:00 || **short-date-le** | 12/31/1969 || **short-date-le-short-time** | 12/31/1969, 7:00 PM || **short-date-le-short-time-24** | 12/31/1969, 19:00 || **short-date-le-long-time** | 12/31/1969, 7:00:00 PM || **short-date-le-long-time-24** | 12/31/1969, 19:00:0 || **long-month-day-year** | December 31, 1969 || **long-month-day-year-short-time** | December 31, 1969, 7:00 PM || **long-month-day-year-short-time-24** | December 31, 1969, 19:00 || **long-month-day-year-long-time** | December 31, 1969, 7:00:00 PM || **long-month-day-year-long-time-24** | December 31, 1969, 19:00:00 || **day-short-month-year** | Dec 31, 1969 || **day-short-month-year-short-time** | Dec 31, 1969, 7:00 PM || **day-short-month-year-short-time-24** | Dec 31, 1969, 19:00 || **day-short-month-year-long-time** | Dec 31, 1969, 7:00:00 PM || **day-short-month-year-long-time-24** | Dec 31, 1969, 19:00:00 || **long-date** | Wednesday, December 31, 1969 || **long-date-short-time** | Wednesday, December 31, 1969, 7:00 PM || **long-date-short-time-24** | Wednesday, December 31, 1969, 19:00 || **long-date-long-time** | Wednesday, December 31, 1969, 7:00:00 PM || **long-date-long-time-24** | Wednesday, December 31, 1969, 19:00:00 || **long-month-year** | December 1969 || **short-month-year** | Dec 1969 || **year** | 1969 |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-FieldInfoFormat.html#dateFormat)
     */
    dateFormat?: string;
    /**
     * Used only with `Number` fields. A value of `true` indicates the numbershould have a digit (or thousands) separator when the value appears in popups.A value of `false` means that no separator will be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-FieldInfoFormat.html#digitSeparator)
     *
     * @default false
     */
    digitSeparator?: boolean;
    /**
     * Used only with `Number` fields to specify the number of supported decimal placesthat should appear in popups. Any places beyond this value are rounded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-FieldInfoFormat.html#places)
     */
    places?: number;
  }

  interface RelatedRecordsInfoFieldOrder extends Accessor, JSONSupport {
    /**
     * The attribute value of the field selected that will drivethe sorting of related records.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-RelatedRecordsInfoFieldOrder.html#field)
     */
    field: string;
    /**
     * Set the ascending or descending sort order of the returned related records.**Possible Values**: asc | desc
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-RelatedRecordsInfoFieldOrder.html#order)
     */
    order: string;

    /**
     * Creates a deep clone of the RelatedRecordsInfoFieldOrder class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-RelatedRecordsInfoFieldOrder.html#clone)
     *
     *
     */
    clone(): RelatedRecordsInfoFieldOrder;
  }

  interface RelatedRecordsInfoFieldOrderConstructor {
    new (properties?: RelatedRecordsInfoFieldOrderProperties): RelatedRecordsInfoFieldOrder;

    fromJSON(json: any): RelatedRecordsInfoFieldOrder;
  }

  export const RelatedRecordsInfoFieldOrder: RelatedRecordsInfoFieldOrderConstructor;

  interface RelatedRecordsInfoFieldOrderProperties {
    /**
     * The attribute value of the field selected that will drivethe sorting of related records.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-RelatedRecordsInfoFieldOrder.html#field)
     */
    field?: string;
    /**
     * Set the ascending or descending sort order of the returned related records.**Possible Values**: asc | desc
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-RelatedRecordsInfoFieldOrder.html#order)
     */
    order?: string;
  }

  interface PopupTemplate extends Accessor, JSONSupport {
    /**
     * A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of [action](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html) or [action toggle](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html) objects.Each object represents an action or function that may be executed by clicking the iconor image symbolizing them in the [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html). By default, every[Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) has a `zoom-to` action styled with a magnifying glass icon![popupTemplate-zoom-action](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/popuptemplate-zoom-action.png).When this icon is clicked, the view zooms in four LODs and centers on the selected feature.PopupTemplates do not have default actions. To override actions on the[Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) using PopupTemplate see [overwriteActions](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#overwriteActions).Actions defined in a PopupTemplate will only appear in the [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) forfeatures or layers that apply that particular PopupTemplate.The order of each action in the popup is the same order in which they appear inthe actions [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html).The [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#event-trigger-action) event in[Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) fires each time an action in the popup is clicked.This event should be used to execute custom code for each action clicked. For example, if you wouldlike to add a `zoom-out` action to the PopupTemplate that zooms the view out several LODs, you woulddefine the zoom-out code in a separate function. Then you would call the custom `zoom-out` functionin the [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#event-trigger-action) event handler. See the sample codesnippet below for more details on how this works.Actions are defined with the properties listed in the [ActionButton](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html) or [ActionToggle](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html) class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#actions)
     */
    actions: Collection<ActionButton | ActionToggle>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#content)
     */
    content: Content | Content[] | string | Function | IPromise<any>;
    /**
     * An array of objects or [ExpressionInfo[]](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-ExpressionInfo.html) that reference[Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#expressionInfos)
     */
    expressionInfos: ExpressionInfo[];
    /**
     * An array of [FieldInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html) that defines how fields in the datasetor values from [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expressions participatein a popup. If no [FieldInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html) are specified, nothing will display sincethe popup will only display the fields that are defined by this array.Each [FieldInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html) contains properties for a single fieldor expression. This property can be set directly within the PopupTemplate orwithin the [fields content element](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html).If this is not set within the [fields content element](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html),it will default to whatever is specified directly within the `PopupTemplate.fieldInfos`.The image on the left is a result of using the first example snippet below, whereas the image on the right is a result of the second snippet.| **Content set using 'fields' type** | **Content referenced from fields set within fieldInfo**  || -------------------------- | --------------------------- || ![popuptemplate-fields](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/popuptemplate-fields.png) | ![popuptemplate-fieldinfocontent](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/popuptemplate-fieldinfocontent.png) |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#fieldInfos)
     */
    fieldInfos: FieldInfo[];
    /**
     * Indicates whether or not editor tracking should display.![popupTemplate-showLastEditInfo](https://developers.arcgis.com/javascript/assets/img/guide/whats-new/410/showlasteditinfo.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#lastEditInfoEnabled)
     *
     * @default true
     */
    lastEditInfoEnabled: boolean;
    /**
     * Additional options that can be defined for the popup layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#layerOptions)
     */
    layerOptions: LayerOptions;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#outFields)
     *
     * @default null
     */
    outFields: string[];
    /**
     * Indicates whether actions should replace existing [popup actions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#actions).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#overwriteActions)
     *
     * @default false
     */
    overwriteActions: boolean;
    /**
     * The `RelatedRecordsInfo` class provides additional sorting optionswhen working with related records in a popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#relatedRecordsInfo)
     */
    relatedRecordsInfo: RelatedRecordsInfo;
    /**
     * The template for defining how to format the title used in a popup.You can format the title by specifying either a string value or a functionthat returns a simple string.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#title)
     */
    title: string | Function;

    /**
     * Creates a deep clone of the PopupTemplate object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#clone)
     *
     *
     */
    clone(): PopupTemplate;
  }

  interface PopupTemplateConstructor {
    new (properties?: PopupTemplateProperties): PopupTemplate;

    fromJSON(json: any): PopupTemplate;
  }

  export const PopupTemplate: PopupTemplateConstructor;

  interface PopupTemplateProperties {
    /**
     * A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of [action](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html) or [action toggle](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html) objects.Each object represents an action or function that may be executed by clicking the iconor image symbolizing them in the [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html). By default, every[Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) has a `zoom-to` action styled with a magnifying glass icon![popupTemplate-zoom-action](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/popuptemplate-zoom-action.png).When this icon is clicked, the view zooms in four LODs and centers on the selected feature.PopupTemplates do not have default actions. To override actions on the[Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) using PopupTemplate see [overwriteActions](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#overwriteActions).Actions defined in a PopupTemplate will only appear in the [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) forfeatures or layers that apply that particular PopupTemplate.The order of each action in the popup is the same order in which they appear inthe actions [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html).The [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#event-trigger-action) event in[Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) fires each time an action in the popup is clicked.This event should be used to execute custom code for each action clicked. For example, if you wouldlike to add a `zoom-out` action to the PopupTemplate that zooms the view out several LODs, you woulddefine the zoom-out code in a separate function. Then you would call the custom `zoom-out` functionin the [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#event-trigger-action) event handler. See the sample codesnippet below for more details on how this works.Actions are defined with the properties listed in the [ActionButton](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html) or [ActionToggle](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html) class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#actions)
     */
    actions?: CollectionProperties<ActionButton | ActionToggle>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#content)
     */
    content?: ContentProperties | ContentProperties[] | string | Function | IPromise<any>;
    /**
     * An array of objects or [ExpressionInfo[]](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-ExpressionInfo.html) that reference[Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#expressionInfos)
     */
    expressionInfos?: ExpressionInfoProperties[];
    /**
     * An array of [FieldInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html) that defines how fields in the datasetor values from [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expressions participatein a popup. If no [FieldInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html) are specified, nothing will display sincethe popup will only display the fields that are defined by this array.Each [FieldInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html) contains properties for a single fieldor expression. This property can be set directly within the PopupTemplate orwithin the [fields content element](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html).If this is not set within the [fields content element](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html),it will default to whatever is specified directly within the `PopupTemplate.fieldInfos`.The image on the left is a result of using the first example snippet below, whereas the image on the right is a result of the second snippet.| **Content set using 'fields' type** | **Content referenced from fields set within fieldInfo**  || -------------------------- | --------------------------- || ![popuptemplate-fields](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/popuptemplate-fields.png) | ![popuptemplate-fieldinfocontent](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/popuptemplate-fieldinfocontent.png) |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#fieldInfos)
     */
    fieldInfos?: FieldInfoProperties[];
    /**
     * Indicates whether or not editor tracking should display.![popupTemplate-showLastEditInfo](https://developers.arcgis.com/javascript/assets/img/guide/whats-new/410/showlasteditinfo.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#lastEditInfoEnabled)
     *
     * @default true
     */
    lastEditInfoEnabled?: boolean;
    /**
     * Additional options that can be defined for the popup layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#layerOptions)
     */
    layerOptions?: LayerOptionsProperties;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#outFields)
     *
     * @default null
     */
    outFields?: string[];
    /**
     * Indicates whether actions should replace existing [popup actions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#actions).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#overwriteActions)
     *
     * @default false
     */
    overwriteActions?: boolean;
    /**
     * The `RelatedRecordsInfo` class provides additional sorting optionswhen working with related records in a popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#relatedRecordsInfo)
     */
    relatedRecordsInfo?: RelatedRecordsInfoProperties;
    /**
     * The template for defining how to format the title used in a popup.You can format the title by specifying either a string value or a functionthat returns a simple string.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#title)
     */
    title?: string | Function;
  }

  interface Portal extends Accessor, Loadable {
    /**
     * The access level of the organization. When public, anonymous users can access theorganization. When private, access is restricted to only members of the organization.**Possible Values:** public | private
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#access)
     */
    access: string;
    /**
     * When `true`, access to the organization's Portal resources must occur over SSL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#allSSL)
     */
    allSSL: boolean;
    /**
     * The authentication mode for handling authentication when the user attempts toaccess a secure resource.Possible Value | Description---------------|------------anonymous | An error will be returned when a secure resource is requested.auto | The user will be signed in when a secure resource is requested.immediate | The user will be signed in when the Portal is loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#authMode)
     *
     * @default auto
     */
    authMode: string;
    /**
     * Array of trusted servers to send credentials to when making Cross-Origin Resource Sharing (CORS) requests to access servicessecured with web-tier authentication.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#authorizedCrossOriginDomains)
     */
    authorizedCrossOriginDomains: string[];
    /**
     * The query that defines the basemaps that should be displayed in the[BasemapGallery](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html) when [useVectorBasemaps](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#useVectorBasemaps) is not true.The [fetchBasemaps()](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#fetchBasemaps) method does this automatically.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#basemapGalleryGroupQuery)
     */
    basemapGalleryGroupQuery: string;
    /**
     * The Bing key to use for web maps using Bing Maps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#bingKey)
     */
    bingKey: string;
    /**
     * Indicates whether an organization can list applications in the marketplace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canListApps)
     */
    canListApps: boolean;
    /**
     * Indicates whether an organization can list data services in the marketplace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canListData)
     */
    canListData: boolean;
    /**
     * Indicates whether an organization can list pre-provisioned items in the marketplace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canListPreProvisionedItems)
     */
    canListPreProvisionedItems: boolean;
    /**
     * Indicates whether an organization can provision direct purchases in the marketplace without customer request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canProvisionDirectPurchase)
     */
    canProvisionDirectPurchase: boolean;
    /**
     * When `true`, the organization's public items, groups and users are included in search queries.When `false`, no public items outside of the organization are included. However,public items which are part of the organization are included.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canSearchPublic)
     *
     * @default true
     */
    canSearchPublic: boolean;
    /**
     * The Bing key can be shared to the public and is returned as part of a portal's description call (`/sharing/rest/portals/<orgid>`).This requires the access of the portal to be set to public. The canShareBingPublic property is not returned publicly but onlyshown to users within the organization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canShareBingPublic)
     *
     * @default false
     */
    canShareBingPublic: boolean;
    /**
     * When `true`, members of the organization can share resources outside the organization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canSharePublic)
     *
     * @default false
     */
    canSharePublic: boolean;
    /**
     * Indicates whether to allow an organization with an enterprise IDP configured to be able to turn on or off the ArcGIS sign in.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canSignInArcGIS)
     *
     * @default false
     */
    canSignInArcGIS: boolean;
    /**
     * Indicates whether to allow an organization with an enterprise IDP configured to be able to turn on or off the enterprise sign in.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canSignInIDP)
     *
     * @default false
     */
    canSignInIDP: boolean;
    /**
     * The query that identifies the group containing the color sets used for rendering in the map viewer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#colorSetsGroupQuery)
     */
    colorSetsGroupQuery: string;
    /**
     * Indicates whether to allow the organization to disable commenting. When commentsEnabled is false, comments are hidden and notremoved. numComments are set to zero for all items in the organization. Calls to add a comment and view comments will fail. If theorganization re-enables comments, the comments display and numComments are restored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#commentsEnabled)
     *
     * @default false
     */
    commentsEnabled: boolean;
    /**
     * Date the organization was created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#created)
     */
    created: Date;
    /**
     * The default locale (language and country) information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#culture)
     */
    culture: string;
    /**
     * The custom base URL for the portal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#customBaseUrl)
     */
    customBaseUrl: string;
    /**
     * The default basemap to use for the portal. Used in the map viewer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#defaultBasemap)
     */
    defaultBasemap: Basemap;
    /**
     * The default extent to use for the portal. Used in the map viewer.The extent will be in the default basemap's spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#defaultExtent)
     */
    defaultExtent: Extent;
    /**
     * The default vector basemap to use for the portal. Used in the map viewer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#defaultVectorBasemap)
     */
    defaultVectorBasemap: Basemap;
    /**
     * A description of the organization/portal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#description)
     */
    description: string;
    /**
     * Boolean value indicating whether to opt-in to the [EsriUser Experience Improvement (EUEI) program](https://doc.arcgis.com/en/arcgis-online/reference/faq.htm#ESRI_QUESTIONANSWER_AED97F28DCD84F7682623C2FA9E5CE49).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#eueiEnabled)
     *
     * @default false
     */
    eueiEnabled: boolean;
    /**
     * The featured groups for the portal. Returns an array of objects that provide access to the owner and title for each featured group.Each item in this array has the following specification:
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#featuredGroups)
     */
    featuredGroups: PortalFeaturedGroups[];
    /**
     * The query that defines the featured group. If null, then the most viewed items in the organization will be the featured items.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#featuredItemsGroupQuery)
     */
    featuredItemsGroupQuery: string;
    /**
     * The query that identifies the group containing features items for the gallery. Set a Group ID or, if null, then the most vieweditems in your organization are displayed in the gallery.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#galleryTemplatesGroupQuery)
     */
    galleryTemplatesGroupQuery: string;
    /**
     * Indicates whether the organization has content categories.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#hasCategorySchema)
     *
     * @default false
     */
    hasCategorySchema: boolean;
    /**
     * Helper services provided by the portal. This is useful in instances where helperservices are needed but may not be available using the given helper methods[createClosestFacilityTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#createClosestFacilityTask),[createElevationLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#createElevationLayers),[createGeometryService](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#createGeometryService),[createPrintTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#createPrintTask),[createRouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#createRouteTask), and[createServiceAreaTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#createServiceAreaTask).For additional information about helper services,see the [about utility services](https://enterprise.arcgis.com/en/portal/latest/administer/windows/about-utility-services.htm)topic from the ArcGIS Server documentation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#helperServices)
     */
    helperServices: any;
    /**
     * The group that contains featured content to be displayed on the home page.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#homePageFeaturedContent)
     */
    homePageFeaturedContent: string;
    /**
     * The number of featured items that can be displayed on the home page. The max is 100. Accepts integers only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#homePageFeaturedContentCount)
     */
    homePageFeaturedContentCount: number;
    /**
     * The port used by the portal for HTTP communication.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#httpPort)
     */
    httpPort: number;
    /**
     * The port used by the portal for HTTPS communication.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#httpsPort)
     */
    httpsPort: number;
    /**
     * The id of the organization that owns this portal. If `null` then this is thedefault portal for anonymous and non-organizational users.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#id)
     */
    id: string;
    /**
     * The country code of the calling IP (ArcGIS Online only).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#ipCntryCode)
     */
    ipCntryCode: string;
    /**
     * Indicates whether the portal is an organization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#isOrganization)
     */
    readonly isOrganization: boolean;
    /**
     * Indicates if the portal is on-premises.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#isPortal)
     */
    isPortal: boolean;
    /**
     * The query that identifies the group containing editing templates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#layerTemplatesGroupQuery)
     */
    layerTemplatesGroupQuery: string;
    /**
     * Indicates whether the portal's resources have loaded. When `true`,all the properties of the object can be accessed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#loaded)
     *
     * @default false
     */
    readonly loaded: boolean;
    /**
     * The maximum validity in minutes of tokens issued for users of the organization.-1 is the default and is a special value that indicates infinite timeout or permanenttokens. For tokens granted using OAuth 2.0 authorization grant, it represents the maximumvalidity of refresh tokens. For access tokens, the maximum validity is the lower oftwo weeks or this value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#maxTokenExpirationMinutes)
     */
    maxTokenExpirationMinutes: number;
    /**
     * Date the organization was last modified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#modified)
     */
    modified: Date;
    /**
     * Name of the organization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#name)
     */
    name: string;
    /**
     * URL of the portal host.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#portalHostname)
     */
    portalHostname: string;
    /**
     * The portal mode.**Possible Values:** multitenant | singletenant
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#portalMode)
     */
    portalMode: string;
    /**
     * Properties specific to the organization, for example the "contact us" link. If theorganization is public, the properties are visible to the anonymous user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#portalProperties)
     */
    portalProperties: any;
    /**
     * The region for the organization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#region)
     */
    region: string;
    /**
     * The REST URL for the portal, for example "https://www.arcgis.com/sharing/rest" for ArcGIS Onlineand "https://www.example.com/arcgis/sharing/rest" for your in-house portal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#restUrl)
     */
    readonly restUrl: string;
    /**
     * Custom HTML for the home page.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#rotatorPanels)
     */
    rotatorPanels: any[];
    /**
     * Indicates whether the description of your organization displays on the home page.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#showHomePageDescription)
     */
    showHomePageDescription: boolean;
    /**
     * Indicates whether hosted services are supported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#supportsHostedServices)
     *
     * @default false
     */
    supportsHostedServices: boolean;
    /**
     * The query that defines the symbols sets.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#symbolSetsGroupQuery)
     */
    symbolSetsGroupQuery: string;
    /**
     * The query that defines the collection of templates that will appear in the templategallery.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#templatesGroupQuery)
     */
    templatesGroupQuery: string;
    /**
     * The URL to the thumbnail of the organization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#thumbnailUrl)
     */
    readonly thumbnailUrl: string;
    /**
     * Sets the units of measure for the organization's users. The user default is derivedfrom the organization's [region](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#region).**Possible Values:** english | metric
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#units)
     */
    units: string;
    /**
     * The URL to the portal instance. Setting the location of the portal instance via[esriConfig.portalUrl](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#portalUrl)should be used in favor of setting it directly on this property.If using an on-premise portal, the syntax should look similar to:`https://www.example.com/arcgis`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#url)
     *
     * @default {@link module:esri/config#portalUrl esriConfig.portalUrl}
     */
    url: string;
    /**
     * The prefix selected by the organization's administrator to be used with the customBaseURL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#urlKey)
     */
    urlKey: string;
    /**
     * Information representing a registered user of the portal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#user)
     */
    user: PortalUser;
    /**
     * When `true`, only simple where clauses that are compliant with SQL92 can be used when querying layers and tables.The recommended security setting is true.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#useStandardizedQuery)
     */
    useStandardizedQuery: boolean;
    /**
     * When `true`, the organization has opted in to use the vector tile basemaps,and (a) [vectorBasemapGalleryGroupQuery](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#vectorBasemapGalleryGroupQuery) shouldbe used instead of [basemapGalleryGroupQuery](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#basemapGalleryGroupQuery), while(b) [defaultVectorBasemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#defaultVectorBasemap) should be used instead of [defaultBasemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#defaultBasemap).The [fetchBasemaps()](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#fetchBasemaps) method automatically uses vectorBasemapGalleryGroupQuery.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#useVectorBasemaps)
     */
    useVectorBasemaps: boolean;
    /**
     * The query that defines the vector tiles basemaps that should be displayed in the[BasemapGallery](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html) when [useVectorBasemaps](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#useVectorBasemaps) is true.The [fetchBasemaps()](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#fetchBasemaps) method does this automatically.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#vectorBasemapGalleryGroupQuery)
     */
    vectorBasemapGalleryGroupQuery: string;

    /**
     * A helper function that returns an instance of the portal's [ClosestFacilityTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ClosestFacilityTask.html)[helper service](https://enterprise.arcgis.com/en/portal/latest/administer/windows/about-utility-services.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#createClosestFacilityTask)
     *
     *
     */
    createClosestFacilityTask(): IPromise<ClosestFacilityTask>;
    /**
     * A helper function that returns an array of [ElevationsLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html)derived from the Portal's [Limited Error Raster Compression (LERC) elevation helper service](https://enterprise.arcgis.com/en/portal/latest/administer/windows/about-utility-services.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#createElevationLayers)
     *
     *
     */
    createElevationLayers(): IPromise<ElevationLayer[]>;
    /**
     * A helper function that returns an instance of the portal's [GeometryService](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html)[helper service](https://enterprise.arcgis.com/en/portal/latest/administer/windows/about-utility-services.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#createGeometryService)
     *
     *
     */
    createGeometryService(): IPromise<GeometryService>;
    /**
     * A helper function that returns an instance of the portal's [PrintTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-PrintTask.html)[helper service](https://enterprise.arcgis.com/en/portal/latest/administer/windows/about-utility-services.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#createPrintTask)
     *
     *
     */
    createPrintTask(): IPromise<PrintTask>;
    /**
     * A helper function that returns an instance of the portal's [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html)[helper service](https://enterprise.arcgis.com/en/portal/latest/administer/windows/about-utility-services.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#createRouteTask)
     *
     *
     */
    createRouteTask(): IPromise<RouteTask>;
    /**
     * A helper function that returns an instance of the portal's [ServiceAreaTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ServiceAreaTask.html)[helper service](https://enterprise.arcgis.com/en/portal/latest/administer/windows/about-utility-services.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#createServiceAreaTask)
     *
     *
     */
    createServiceAreaTask(): IPromise<ServiceAreaTask>;
    /**
     * Fetches the [basemaps](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html) that are displayed in the[BasemapGallery](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html).When [useVectorBasemaps](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#useVectorBasemaps) is `true`, the basemaps will be based on[vectorBasemapGalleryGroupQuery](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#vectorBasemapGalleryGroupQuery).  Otherwise, it is based on[basemapGalleryGroupQuery](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#basemapGalleryGroupQuery).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#fetchBasemaps)
     *
     * @param basemapGalleryGroupQuery When provided, this argument is used  to fetch basemaps based on input query parameters.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    fetchBasemaps(basemapGalleryGroupQuery?: string, options?: PortalFetchBasemapsOptions): IPromise<Basemap[]>;
    /**
     * If present, fetches the organization's category schema.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#fetchCategorySchema)
     *
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    fetchCategorySchema(options?: PortalFetchCategorySchemaOptions): IPromise<any[]>;
    /**
     * Fetches the featured groups in the Portal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#fetchFeaturedGroups)
     *
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    fetchFeaturedGroups(options?: PortalFetchFeaturedGroupsOptions): IPromise<PortalGroup[]>;
    /**
     * Fetches and returns the associated regions with the portal instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#fetchRegions)
     *
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    fetchRegions(options?: PortalFetchRegionsOptions): IPromise<any[]>;
    /**
     * Executes a query against the Portal to return an array of[PortalGroup](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html) objects that match the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#queryGroups)
     *
     * @param queryParams The input query parameters defined in [PortalQueryParams](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html).
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryGroups(
      queryParams: PortalQueryParams | PortalQueryParamsProperties,
      options?: PortalQueryGroupsOptions
    ): IPromise<PortalQueryResult>;
    /**
     * Executes a query against the Portal to return an array of [PortalItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html)objects that match the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#queryItems)
     *
     * @param queryParams The input query parameters defined in [PortalQueryParams](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html).
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryItems(
      queryParams: PortalQueryParams | PortalQueryParamsProperties,
      options?: PortalQueryItemsOptions
    ): IPromise<PortalQueryResult>;
    /**
     * Executes a query against the Portal to return an array of [PortalUser](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html)objects that match the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#queryUsers)
     *
     * @param queryParams The input query parameters defined in [PortalQueryParams](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html).
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryUsers(
      queryParams: PortalQueryParams | PortalQueryParamsProperties,
      options?: PortalQueryUsersOptions
    ): IPromise<PortalQueryResult>;
  }

  interface PortalConstructor {
    new (properties?: PortalProperties): Portal;

    /**
     * Returns a cached default Portal instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#getDefault)
     *
     *
     */
    getDefault(): Portal;
  }

  export const Portal: PortalConstructor;

  interface PortalProperties extends LoadableProperties {
    /**
     * The access level of the organization. When public, anonymous users can access theorganization. When private, access is restricted to only members of the organization.**Possible Values:** public | private
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#access)
     */
    access?: string;
    /**
     * When `true`, access to the organization's Portal resources must occur over SSL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#allSSL)
     */
    allSSL?: boolean;
    /**
     * The authentication mode for handling authentication when the user attempts toaccess a secure resource.Possible Value | Description---------------|------------anonymous | An error will be returned when a secure resource is requested.auto | The user will be signed in when a secure resource is requested.immediate | The user will be signed in when the Portal is loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#authMode)
     *
     * @default auto
     */
    authMode?: string;
    /**
     * Array of trusted servers to send credentials to when making Cross-Origin Resource Sharing (CORS) requests to access servicessecured with web-tier authentication.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#authorizedCrossOriginDomains)
     */
    authorizedCrossOriginDomains?: string[];
    /**
     * The query that defines the basemaps that should be displayed in the[BasemapGallery](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html) when [useVectorBasemaps](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#useVectorBasemaps) is not true.The [fetchBasemaps()](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#fetchBasemaps) method does this automatically.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#basemapGalleryGroupQuery)
     */
    basemapGalleryGroupQuery?: string;
    /**
     * The Bing key to use for web maps using Bing Maps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#bingKey)
     */
    bingKey?: string;
    /**
     * Indicates whether an organization can list applications in the marketplace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canListApps)
     */
    canListApps?: boolean;
    /**
     * Indicates whether an organization can list data services in the marketplace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canListData)
     */
    canListData?: boolean;
    /**
     * Indicates whether an organization can list pre-provisioned items in the marketplace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canListPreProvisionedItems)
     */
    canListPreProvisionedItems?: boolean;
    /**
     * Indicates whether an organization can provision direct purchases in the marketplace without customer request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canProvisionDirectPurchase)
     */
    canProvisionDirectPurchase?: boolean;
    /**
     * When `true`, the organization's public items, groups and users are included in search queries.When `false`, no public items outside of the organization are included. However,public items which are part of the organization are included.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canSearchPublic)
     *
     * @default true
     */
    canSearchPublic?: boolean;
    /**
     * The Bing key can be shared to the public and is returned as part of a portal's description call (`/sharing/rest/portals/<orgid>`).This requires the access of the portal to be set to public. The canShareBingPublic property is not returned publicly but onlyshown to users within the organization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canShareBingPublic)
     *
     * @default false
     */
    canShareBingPublic?: boolean;
    /**
     * When `true`, members of the organization can share resources outside the organization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canSharePublic)
     *
     * @default false
     */
    canSharePublic?: boolean;
    /**
     * Indicates whether to allow an organization with an enterprise IDP configured to be able to turn on or off the ArcGIS sign in.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canSignInArcGIS)
     *
     * @default false
     */
    canSignInArcGIS?: boolean;
    /**
     * Indicates whether to allow an organization with an enterprise IDP configured to be able to turn on or off the enterprise sign in.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canSignInIDP)
     *
     * @default false
     */
    canSignInIDP?: boolean;
    /**
     * The query that identifies the group containing the color sets used for rendering in the map viewer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#colorSetsGroupQuery)
     */
    colorSetsGroupQuery?: string;
    /**
     * Indicates whether to allow the organization to disable commenting. When commentsEnabled is false, comments are hidden and notremoved. numComments are set to zero for all items in the organization. Calls to add a comment and view comments will fail. If theorganization re-enables comments, the comments display and numComments are restored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#commentsEnabled)
     *
     * @default false
     */
    commentsEnabled?: boolean;
    /**
     * Date the organization was created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#created)
     */
    created?: DateProperties;
    /**
     * The default locale (language and country) information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#culture)
     */
    culture?: string;
    /**
     * The custom base URL for the portal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#customBaseUrl)
     */
    customBaseUrl?: string;
    /**
     * The default basemap to use for the portal. Used in the map viewer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#defaultBasemap)
     */
    defaultBasemap?: BasemapProperties;
    /**
     * The default extent to use for the portal. Used in the map viewer.The extent will be in the default basemap's spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#defaultExtent)
     */
    defaultExtent?: ExtentProperties;
    /**
     * The default vector basemap to use for the portal. Used in the map viewer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#defaultVectorBasemap)
     */
    defaultVectorBasemap?: BasemapProperties;
    /**
     * A description of the organization/portal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#description)
     */
    description?: string;
    /**
     * Boolean value indicating whether to opt-in to the [EsriUser Experience Improvement (EUEI) program](https://doc.arcgis.com/en/arcgis-online/reference/faq.htm#ESRI_QUESTIONANSWER_AED97F28DCD84F7682623C2FA9E5CE49).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#eueiEnabled)
     *
     * @default false
     */
    eueiEnabled?: boolean;
    /**
     * The featured groups for the portal. Returns an array of objects that provide access to the owner and title for each featured group.Each item in this array has the following specification:
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#featuredGroups)
     */
    featuredGroups?: PortalFeaturedGroups[];
    /**
     * The query that defines the featured group. If null, then the most viewed items in the organization will be the featured items.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#featuredItemsGroupQuery)
     */
    featuredItemsGroupQuery?: string;
    /**
     * The query that identifies the group containing features items for the gallery. Set a Group ID or, if null, then the most vieweditems in your organization are displayed in the gallery.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#galleryTemplatesGroupQuery)
     */
    galleryTemplatesGroupQuery?: string;
    /**
     * Indicates whether the organization has content categories.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#hasCategorySchema)
     *
     * @default false
     */
    hasCategorySchema?: boolean;
    /**
     * Helper services provided by the portal. This is useful in instances where helperservices are needed but may not be available using the given helper methods[createClosestFacilityTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#createClosestFacilityTask),[createElevationLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#createElevationLayers),[createGeometryService](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#createGeometryService),[createPrintTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#createPrintTask),[createRouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#createRouteTask), and[createServiceAreaTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#createServiceAreaTask).For additional information about helper services,see the [about utility services](https://enterprise.arcgis.com/en/portal/latest/administer/windows/about-utility-services.htm)topic from the ArcGIS Server documentation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#helperServices)
     */
    helperServices?: any;
    /**
     * The group that contains featured content to be displayed on the home page.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#homePageFeaturedContent)
     */
    homePageFeaturedContent?: string;
    /**
     * The number of featured items that can be displayed on the home page. The max is 100. Accepts integers only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#homePageFeaturedContentCount)
     */
    homePageFeaturedContentCount?: number;
    /**
     * The port used by the portal for HTTP communication.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#httpPort)
     */
    httpPort?: number;
    /**
     * The port used by the portal for HTTPS communication.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#httpsPort)
     */
    httpsPort?: number;
    /**
     * The id of the organization that owns this portal. If `null` then this is thedefault portal for anonymous and non-organizational users.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#id)
     */
    id?: string;
    /**
     * The country code of the calling IP (ArcGIS Online only).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#ipCntryCode)
     */
    ipCntryCode?: string;
    /**
     * Indicates if the portal is on-premises.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#isPortal)
     */
    isPortal?: boolean;
    /**
     * The query that identifies the group containing editing templates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#layerTemplatesGroupQuery)
     */
    layerTemplatesGroupQuery?: string;
    /**
     * The maximum validity in minutes of tokens issued for users of the organization.-1 is the default and is a special value that indicates infinite timeout or permanenttokens. For tokens granted using OAuth 2.0 authorization grant, it represents the maximumvalidity of refresh tokens. For access tokens, the maximum validity is the lower oftwo weeks or this value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#maxTokenExpirationMinutes)
     */
    maxTokenExpirationMinutes?: number;
    /**
     * Date the organization was last modified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#modified)
     */
    modified?: DateProperties;
    /**
     * Name of the organization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#name)
     */
    name?: string;
    /**
     * URL of the portal host.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#portalHostname)
     */
    portalHostname?: string;
    /**
     * The portal mode.**Possible Values:** multitenant | singletenant
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#portalMode)
     */
    portalMode?: string;
    /**
     * Properties specific to the organization, for example the "contact us" link. If theorganization is public, the properties are visible to the anonymous user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#portalProperties)
     */
    portalProperties?: any;
    /**
     * The region for the organization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#region)
     */
    region?: string;
    /**
     * Custom HTML for the home page.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#rotatorPanels)
     */
    rotatorPanels?: any[];
    /**
     * Indicates whether the description of your organization displays on the home page.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#showHomePageDescription)
     */
    showHomePageDescription?: boolean;
    /**
     * Indicates whether hosted services are supported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#supportsHostedServices)
     *
     * @default false
     */
    supportsHostedServices?: boolean;
    /**
     * The query that defines the symbols sets.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#symbolSetsGroupQuery)
     */
    symbolSetsGroupQuery?: string;
    /**
     * The query that defines the collection of templates that will appear in the templategallery.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#templatesGroupQuery)
     */
    templatesGroupQuery?: string;
    /**
     * Sets the units of measure for the organization's users. The user default is derivedfrom the organization's [region](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#region).**Possible Values:** english | metric
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#units)
     */
    units?: string;
    /**
     * The URL to the portal instance. Setting the location of the portal instance via[esriConfig.portalUrl](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#portalUrl)should be used in favor of setting it directly on this property.If using an on-premise portal, the syntax should look similar to:`https://www.example.com/arcgis`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#url)
     *
     * @default {@link module:esri/config#portalUrl esriConfig.portalUrl}
     */
    url?: string;
    /**
     * The prefix selected by the organization's administrator to be used with the customBaseURL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#urlKey)
     */
    urlKey?: string;
    /**
     * Information representing a registered user of the portal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#user)
     */
    user?: PortalUserProperties;
    /**
     * When `true`, only simple where clauses that are compliant with SQL92 can be used when querying layers and tables.The recommended security setting is true.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#useStandardizedQuery)
     */
    useStandardizedQuery?: boolean;
    /**
     * When `true`, the organization has opted in to use the vector tile basemaps,and (a) [vectorBasemapGalleryGroupQuery](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#vectorBasemapGalleryGroupQuery) shouldbe used instead of [basemapGalleryGroupQuery](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#basemapGalleryGroupQuery), while(b) [defaultVectorBasemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#defaultVectorBasemap) should be used instead of [defaultBasemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#defaultBasemap).The [fetchBasemaps()](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#fetchBasemaps) method automatically uses vectorBasemapGalleryGroupQuery.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#useVectorBasemaps)
     */
    useVectorBasemaps?: boolean;
    /**
     * The query that defines the vector tiles basemaps that should be displayed in the[BasemapGallery](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html) when [useVectorBasemaps](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#useVectorBasemaps) is true.The [fetchBasemaps()](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#fetchBasemaps) method does this automatically.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#vectorBasemapGalleryGroupQuery)
     */
    vectorBasemapGalleryGroupQuery?: string;
  }

  export interface PortalFeaturedGroups extends Object {
    /**
     * Name of the group owner.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#featuredGroups)
     */
    owner: string;
    /**
     * Group title.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#featuredGroups)
     */
    title: string;
  }

  export interface PortalFetchBasemapsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#fetchBasemaps)
     */
    signal?: AbortSignal;
  }

  export interface PortalFetchCategorySchemaOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#fetchCategorySchema)
     */
    signal?: AbortSignal;
  }

  export interface PortalFetchFeaturedGroupsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#fetchFeaturedGroups)
     */
    signal?: AbortSignal;
  }

  export interface PortalFetchRegionsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#fetchRegions)
     */
    signal?: AbortSignal;
  }

  export interface PortalQueryGroupsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#queryGroups)
     */
    signal?: AbortSignal;
  }

  export interface PortalQueryItemsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#queryItems)
     */
    signal?: AbortSignal;
  }

  export interface PortalQueryUsersOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#queryUsers)
     */
    signal?: AbortSignal;
  }

  interface PortalFolder extends Accessor {
    /**
     * The date the folder was created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalFolder.html#created)
     */
    created: Date;
    /**
     * The unique id of the folder.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalFolder.html#id)
     */
    id: string;
    /**
     * The portal associated with the folder.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalFolder.html#portal)
     */
    portal: Portal;
    /**
     * The title of the folder.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalFolder.html#title)
     */
    title: string;
    /**
     * The URL to the folder.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalFolder.html#url)
     */
    readonly url: string;
  }

  interface PortalFolderConstructor {
    new (properties?: PortalFolderProperties): PortalFolder;
  }

  export const PortalFolder: PortalFolderConstructor;

  interface PortalFolderProperties {
    /**
     * The date the folder was created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalFolder.html#created)
     */
    created?: DateProperties;
    /**
     * The unique id of the folder.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalFolder.html#id)
     */
    id?: string;
    /**
     * The portal associated with the folder.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalFolder.html#portal)
     */
    portal?: PortalProperties;
    /**
     * The title of the folder.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalFolder.html#title)
     */
    title?: string;
  }

  interface PortalGroup extends Accessor {
    /**
     * The access privileges on the group which determines who can see and access the group.**Possible Values:** private | org | public
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#access)
     */
    access: string;
    /**
     * The date the group was created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#created)
     */
    created: Date;
    /**
     * A detailed description of the group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#description)
     */
    description: string;
    /**
     * The unique id for the group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#id)
     */
    id: string;
    /**
     * If set to `true`, then users will not be able to apply to join the group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#isInvitationOnly)
     *
     * @default false
     */
    isInvitationOnly: boolean;
    /**
     * The date the group was last modified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#modified)
     */
    modified: Date;
    /**
     * The username of the group's owner.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#owner)
     */
    owner: string;
    /**
     * The portal associated with the group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#portal)
     */
    portal: Portal;
    /**
     * A short summary that describes the group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#snippet)
     */
    snippet: string;
    /**
     * User defined tags that describe the group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#tags)
     */
    tags: string[];
    /**
     * The URL to the thumbnail used for the group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#thumbnailUrl)
     */
    readonly thumbnailUrl: string;
    /**
     * The title of the group. This is the name that is displayed to users. It is alsoused to refer to the group. Every group must have a title and it must be unique.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#title)
     */
    title: string;
    /**
     * The URL to the group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#url)
     */
    readonly url: string;

    /**
     * If present, fetches the group's category schema.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#fetchCategorySchema)
     *
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    fetchCategorySchema(options?: PortalGroupFetchCategorySchemaOptions): IPromise<any[]>;
    /**
     * Fetches the current members of the group. This method is only available to members oradministrators of the group. View the ArcGIS REST API documentationfor the [Group Users](https://developers.arcgis.com/rest/users-groups-and-items/group-users.htm)for more details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#fetchMembers)
     *
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    fetchMembers(options?: PortalGroupFetchMembersOptions): IPromise<any>;
    /**
     * Get the URL to the thumbnail image for the group.Available width sizes: 150, 300 and 600.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#getThumbnailUrl)
     *
     * @param width The desired image width.
     *
     */
    getThumbnailUrl(width?: number): string;
    /**
     * Executes a query against the group to return an array of [PortalItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html) objectsthat match the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#queryItems)
     *
     * @param queryParams The input query parameters defined in [PortalQueryParams](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html).
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryItems(
      queryParams?: PortalQueryParams | PortalQueryParamsProperties,
      options?: PortalGroupQueryItemsOptions
    ): IPromise<PortalQueryResult>;
  }

  interface PortalGroupConstructor {
    new (properties?: PortalGroupProperties): PortalGroup;
  }

  export const PortalGroup: PortalGroupConstructor;

  interface PortalGroupProperties {
    /**
     * The access privileges on the group which determines who can see and access the group.**Possible Values:** private | org | public
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#access)
     */
    access?: string;
    /**
     * The date the group was created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#created)
     */
    created?: DateProperties;
    /**
     * A detailed description of the group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#description)
     */
    description?: string;
    /**
     * The unique id for the group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#id)
     */
    id?: string;
    /**
     * If set to `true`, then users will not be able to apply to join the group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#isInvitationOnly)
     *
     * @default false
     */
    isInvitationOnly?: boolean;
    /**
     * The date the group was last modified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#modified)
     */
    modified?: DateProperties;
    /**
     * The username of the group's owner.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#owner)
     */
    owner?: string;
    /**
     * The portal associated with the group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#portal)
     */
    portal?: PortalProperties;
    /**
     * A short summary that describes the group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#snippet)
     */
    snippet?: string;
    /**
     * User defined tags that describe the group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#tags)
     */
    tags?: string[];
    /**
     * The title of the group. This is the name that is displayed to users. It is alsoused to refer to the group. Every group must have a title and it must be unique.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#title)
     */
    title?: string;
  }

  export interface PortalGroupFetchCategorySchemaOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#fetchCategorySchema)
     */
    signal?: AbortSignal;
  }

  export interface PortalGroupFetchMembersOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#fetchMembers)
     */
    signal?: AbortSignal;
  }

  export interface PortalGroupQueryItemsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#queryItems)
     */
    signal?: AbortSignal;
  }

  interface PortalItem extends Accessor, Loadable, JSONSupport {
    /**
     * Indicates the level of access to this item: `private`, `shared`, `org`, or `public`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#access)
     */
    access: string;
    /**
     * Information on the source of the item and its copyright status.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#accessInformation)
     */
    accessInformation: string;
    /**
     * Contains an array of objects containing proxy information for premium platform services.This is most widely seen in registered applications that work with premium and subscriberservices, e.g. routing and analysis services.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#applicationProxies)
     */
    readonly applicationProxies: PortalItemApplicationProxies[];
    /**
     * Average rating. Uses a weighted average called "Bayesian average."
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#avgRating)
     */
    avgRating: number;
    /**
     * An array of organization categories that are set on the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#categories)
     */
    categories: string[];
    /**
     * The date the item was created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#created)
     */
    created: Date;
    /**
     * The item's locale information (language and country).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#culture)
     */
    culture: string;
    /**
     * The detailed description of the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#description)
     */
    description: string;
    /**
     * The geographic extent, or bounding rectangle, of the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#extent)
     */
    extent: Extent;
    /**
     * An array of group categories set on the item. This varies slightlyfrom `categories` as it only returns categories in the group contentreturned from [PortalGroup.queryItems](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#queryItems).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#groupCategories)
     */
    groupCategories: string[];
    /**
     * The unique id for the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#id)
     */
    id: string;
    /**
     * Indicates whether a layer can be created from this item using [Layer.fromPortalItem()](esri-layers-Layer.html#fromPortalItem).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#isLayer)
     */
    readonly isLayer: boolean;
    /**
     * Indicates whether an item can be updated and deleted.Possible Value | Description---------------|------------admin | The item can be updated or deleted.update | The item can be updated, but not deleted.null | The item cannot be updated nor deleted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#itemControl)
     */
    readonly itemControl: string;
    /**
     * The URL to the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#itemUrl)
     */
    readonly itemUrl: string;
    /**
     * Information on license or restrictions related to the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#licenseInfo)
     */
    licenseInfo: string;
    /**
     * Indicates whether the item's resources have loaded from the portal. When `true`,all the properties of the object can be accessed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#loaded)
     *
     * @default false
     */
    readonly loaded: boolean;
    /**
     * The date the item was last modified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#modified)
     */
    modified: Date;
    /**
     * The name of the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#name)
     */
    name: string;
    /**
     * Number of comments on the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#numComments)
     */
    numComments: number;
    /**
     * Number of ratings on the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#numRatings)
     */
    numRatings: number;
    /**
     * Number of views on the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#numViews)
     */
    numViews: number;
    /**
     * The username of the user who owns this item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#owner)
     */
    owner: string;
    /**
     * The ID of the folder in which the owner has stored the item.This is only returned to the item owner or the org administrator.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#ownerFolder)
     */
    ownerFolder: string;
    /**
     * The portal that contains the item.Defaults to the value in [config.portalUrl](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#portalUrl)(e.g. https://www.arcgis.com). Suggested to use [config.portalUrl](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#portalUrl) instead of this property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#portal)
     */
    portal: Portal;
    /**
     * An array of string URLs. These URLs should point toscreenshots (i.e. screen captures) associated with an application.An example value could be something similar to`"screenshots/Basic.png"`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#screenshots)
     *
     * @default null
     */
    screenshots: string[];
    /**
     * The size of the item (in bytes).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#size)
     */
    size: number;
    /**
     * A summary description of the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#snippet)
     */
    snippet: string;
    /**
     * User defined tags that describe the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#tags)
     */
    tags: string[];
    /**
     * The URL to the thumbnail used for the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#thumbnailUrl)
     */
    readonly thumbnailUrl: string;
    /**
     * The title for the item. This is the name that is displayed to users andused to refer to the item. Every item must have a title.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#title)
     */
    title: string;
    /**
     * The GIS content type of this item. Example types include Web Map, Map Service, Shapefile, and Web Mapping Application.See the [ArcGIS REST API Items and Items Types Reference](https://developers.arcgis.com/rest/users-groups-and-items/items-and-item-types.htm) to get an understanding of the item type hierarchy.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#type)
     */
    type: string;
    /**
     * Type keywords that describe the type of content of this item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#typeKeywords)
     */
    typeKeywords: string[];
    /**
     * The service URL of this item. Only certain layer item types such as"Feature Service", "Map Service", "Image Service", "Scene Service","WMS" and "KML" have service URLs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#url)
     */
    url: string;

    /**
     * Adds a rating to an accessible item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#addRating)
     *
     * @param rating Rating to set for the item. Rating must be a number between 1.0 and 5.0.
     *
     */
    addRating(rating: number | PortalRating): IPromise<PortalRating>;
    /**
     * Creates a clone of this object. It is a deep clone except for the `portal` property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#clone)
     *
     *
     */
    clone(): PortalItem;
    /**
     * Deletes a rating for the specified item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#deleteRating)
     *
     *
     */
    deleteRating(): IPromise<any>;
    /**
     * Requests a PortalItem in the format specified in `responseType`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#fetchData)
     *
     * @param responseType The format of the response.  **Possible Values:** json | xml | text | blob | array-buffer | document
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    fetchData(responseType?: string, options?: PortalItemFetchDataOptions): IPromise<any>;
    /**
     * Returns the rating (if any) given to the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#fetchRating)
     *
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    fetchRating(options?: PortalItemFetchRatingOptions): IPromise<PortalRating>;
    /**
     * Gets all the related items of a certain relationship type for the portal item.An optional direction can be specified if the direction of the relationshipis ambiguous. Otherwise, the service will try to infer it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#fetchRelatedItems)
     *
     * @param params See the object specifications table below for theparameters that may be passed as properties in this object.
     * @param params.relationshipType The type of relationship between the two items.See [Relationship types](https://developers.arcgis.com/rest/users-groups-and-items/relationship-types.htm) for a complete listing of types.
     * @param params.direction The direction of the relationship. Can either  be `forward` (from origin to destination) or `reverse` (from destination to origin).  **Possible Values:** forward | reverse
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    fetchRelatedItems(
      params: PortalItemFetchRelatedItemsParams,
      options?: PortalItemFetchRelatedItemsOptions
    ): IPromise<PortalItem[]>;
    /**
     * Get the URL to the thumbnail image for the item.Available width sizes: 200, 400, 800 and 2400.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#getThumbnailUrl)
     *
     * @param width The desired image width.
     *
     */
    getThumbnailUrl(width?: number): string;
    /**
     * Updates the item's properties to the portal, and optionally its data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#update)
     *
     * @param params See the object specifications table below for theparameters that may be passed as properties in this object.
     * @param params.data **Optional**. The component used to streamthe data represented by the item to the client.
     *
     */
    update(params?: PortalItemUpdateParams): IPromise<PortalItem>;
    /**
     * Updates the item's thumbnail on the portal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#updateThumbnail)
     *
     * @param params See the object specification table below for theparameters that may be passed as properties in this object.
     * @param params.thumbnail A URL, Data URI, Blob, or File.The accepted formats are `GIF`, `JPG`, and `PNG`.
     *
     */
    updateThumbnail(params: PortalItemUpdateThumbnailParams): IPromise<PortalItem>;
  }

  interface PortalItemConstructor {
    new (properties?: PortalItemProperties): PortalItem;

    fromJSON(json: any): PortalItem;
  }

  export const PortalItem: PortalItemConstructor;

  interface PortalItemProperties extends LoadableProperties {
    /**
     * Indicates the level of access to this item: `private`, `shared`, `org`, or `public`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#access)
     */
    access?: string;
    /**
     * Information on the source of the item and its copyright status.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#accessInformation)
     */
    accessInformation?: string;
    /**
     * Average rating. Uses a weighted average called "Bayesian average."
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#avgRating)
     */
    avgRating?: number;
    /**
     * An array of organization categories that are set on the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#categories)
     */
    categories?: string[];
    /**
     * The date the item was created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#created)
     */
    created?: DateProperties;
    /**
     * The item's locale information (language and country).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#culture)
     */
    culture?: string;
    /**
     * The detailed description of the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#description)
     */
    description?: string;
    /**
     * The geographic extent, or bounding rectangle, of the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#extent)
     */
    extent?: ExtentProperties;
    /**
     * An array of group categories set on the item. This varies slightlyfrom `categories` as it only returns categories in the group contentreturned from [PortalGroup.queryItems](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#queryItems).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#groupCategories)
     */
    groupCategories?: string[];
    /**
     * The unique id for the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#id)
     */
    id?: string;
    /**
     * Information on license or restrictions related to the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#licenseInfo)
     */
    licenseInfo?: string;
    /**
     * The date the item was last modified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#modified)
     */
    modified?: DateProperties;
    /**
     * The name of the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#name)
     */
    name?: string;
    /**
     * Number of comments on the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#numComments)
     */
    numComments?: number;
    /**
     * Number of ratings on the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#numRatings)
     */
    numRatings?: number;
    /**
     * Number of views on the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#numViews)
     */
    numViews?: number;
    /**
     * The username of the user who owns this item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#owner)
     */
    owner?: string;
    /**
     * The ID of the folder in which the owner has stored the item.This is only returned to the item owner or the org administrator.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#ownerFolder)
     */
    ownerFolder?: string;
    /**
     * The portal that contains the item.Defaults to the value in [config.portalUrl](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#portalUrl)(e.g. https://www.arcgis.com). Suggested to use [config.portalUrl](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#portalUrl) instead of this property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#portal)
     */
    portal?: PortalProperties;
    /**
     * An array of string URLs. These URLs should point toscreenshots (i.e. screen captures) associated with an application.An example value could be something similar to`"screenshots/Basic.png"`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#screenshots)
     *
     * @default null
     */
    screenshots?: string[];
    /**
     * The size of the item (in bytes).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#size)
     */
    size?: number;
    /**
     * A summary description of the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#snippet)
     */
    snippet?: string;
    /**
     * User defined tags that describe the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#tags)
     */
    tags?: string[];
    /**
     * The title for the item. This is the name that is displayed to users andused to refer to the item. Every item must have a title.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#title)
     */
    title?: string;
    /**
     * The GIS content type of this item. Example types include Web Map, Map Service, Shapefile, and Web Mapping Application.See the [ArcGIS REST API Items and Items Types Reference](https://developers.arcgis.com/rest/users-groups-and-items/items-and-item-types.htm) to get an understanding of the item type hierarchy.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#type)
     */
    type?: string;
    /**
     * Type keywords that describe the type of content of this item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#typeKeywords)
     */
    typeKeywords?: string[];
    /**
     * The service URL of this item. Only certain layer item types such as"Feature Service", "Map Service", "Image Service", "Scene Service","WMS" and "KML" have service URLs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#url)
     */
    url?: string;
  }

  export interface PortalItemApplicationProxies extends Object {
    /**
     * The URL of the premium map service layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#applicationProxies)
     */
    sourceUrl: string;
    /**
     * The proxy URL for the source URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#applicationProxies)
     */
    proxyUrl: string;
    /**
     * The proxy ID registered in ArcGIS Online or ArcGIS Enterprise Portal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#applicationProxies)
     */
    proxyId: string;
  }

  export interface PortalItemFetchDataOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#fetchData)
     */
    signal?: AbortSignal;
  }

  export interface PortalItemFetchRatingOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#fetchRating)
     */
    signal?: AbortSignal;
  }

  export interface PortalItemFetchRelatedItemsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#fetchRelatedItems)
     */
    signal?: AbortSignal;
  }

  export interface PortalItemFetchRelatedItemsParams extends Object {
    /**
     * The type of relationship between the two items.See [Relationship types](https://developers.arcgis.com/rest/users-groups-and-items/relationship-types.htm) for a complete listing of types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#fetchRelatedItems)
     */
    relationshipType: string;
    /**
     * The direction of the relationship. Can either  be `forward` (from origin to destination) or `reverse` (from destination to origin).  **Possible Values:** forward | reverse
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#fetchRelatedItems)
     */
    direction?: string;
  }

  export interface PortalItemUpdateParams extends Object {
    /**
     * **Optional**. The component used to streamthe data represented by the item to the client.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#update)
     */
    data: string | any;
  }

  export interface PortalItemUpdateThumbnailParams extends Object {
    /**
     * A URL, Data URI, Blob, or File.The accepted formats are `GIF`, `JPG`, and `PNG`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#updateThumbnail)
     */
    thumbnail: Blob | string;
  }

  interface PortalQueryParams extends Accessor {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#categories)
     */
    categories: (string | string[])[];
    /**
     * Only relevant when querying for [PortalItems](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html).When specified, restricts the results of the query to the extent defined here.The [spatial reference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#spatialReference) of thegiven extent must be WGS84 (wkid 4326) or Web Mercator (wkid 3857).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#extent)
     */
    extent: Extent;
    /**
     * The maximum number of results to be included in the[result](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryResult.html#results) set response.The maximum value allowed is `100`. The [start](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#start) property combinedwith the `num` property can be used to paginate the search results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#num)
     *
     * @default 10
     */
    num: number;
    /**
     * The query string used for the search. View the[ArcGIS REST API Search Reference](https://developers.arcgis.com/rest/users-groups-and-items/search-reference.htm)for details on constructing a valid query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#query)
     */
    query: string;
    /**
     * A comma-delimited list of fields to sort. Field names may vary depending on what is being queried. For example, the fields allowed for a user query are much more limited than if performing a basic search query for portal items. A list of possible field names is listed below. These names correspond to either item (search), group, and/or user queries.Field name | Query functionality---------------|------------title | search, groupuploaded | searchmodified | searchusername | usercreated | user, grouptype | searchowner | search, groupavg-rating | searchnum-ratings | searchnum-comments | searchnum-views | search
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#sortField)
     */
    sortField: string;
    /**
     * The order in which to sort the results.Possible Value | Description---------------|------------asc | Sort the results in ascending order.desc | Sort the results in descending order.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#sortOrder)
     *
     * @default asc
     */
    sortOrder: string;
    /**
     * The index of the first entry in the result set response. The index is 1-based.The [start](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#start) property, along with the [num](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#num) property can be usedto paginate the search results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#start)
     *
     * @default 1
     */
    start: number;

    /**
     * Creates a deep clone of the instance of PortalQueryParams that calls this method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#clone)
     *
     *
     */
    clone(): PortalQueryParams;
  }

  interface PortalQueryParamsConstructor {
    new (properties?: PortalQueryParamsProperties): PortalQueryParams;
  }

  export const PortalQueryParams: PortalQueryParamsConstructor;

  interface PortalQueryParamsProperties {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#categories)
     */
    categories?: (string | string[])[];
    /**
     * Only relevant when querying for [PortalItems](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html).When specified, restricts the results of the query to the extent defined here.The [spatial reference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#spatialReference) of thegiven extent must be WGS84 (wkid 4326) or Web Mercator (wkid 3857).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#extent)
     */
    extent?: ExtentProperties;
    /**
     * The maximum number of results to be included in the[result](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryResult.html#results) set response.The maximum value allowed is `100`. The [start](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#start) property combinedwith the `num` property can be used to paginate the search results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#num)
     *
     * @default 10
     */
    num?: number;
    /**
     * The query string used for the search. View the[ArcGIS REST API Search Reference](https://developers.arcgis.com/rest/users-groups-and-items/search-reference.htm)for details on constructing a valid query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#query)
     */
    query?: string;
    /**
     * A comma-delimited list of fields to sort. Field names may vary depending on what is being queried. For example, the fields allowed for a user query are much more limited than if performing a basic search query for portal items. A list of possible field names is listed below. These names correspond to either item (search), group, and/or user queries.Field name | Query functionality---------------|------------title | search, groupuploaded | searchmodified | searchusername | usercreated | user, grouptype | searchowner | search, groupavg-rating | searchnum-ratings | searchnum-comments | searchnum-views | search
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#sortField)
     */
    sortField?: string;
    /**
     * The order in which to sort the results.Possible Value | Description---------------|------------asc | Sort the results in ascending order.desc | Sort the results in descending order.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#sortOrder)
     *
     * @default asc
     */
    sortOrder?: string;
    /**
     * The index of the first entry in the result set response. The index is 1-based.The [start](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#start) property, along with the [num](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#num) property can be usedto paginate the search results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#start)
     *
     * @default 1
     */
    start?: number;
  }

  interface PortalQueryResult extends Accessor {
    /**
     * The query parameters for the next set of results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryResult.html#nextQueryParams)
     */
    nextQueryParams: PortalQueryParams;
    /**
     * The query parameters for the first set of results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryResult.html#queryParams)
     */
    queryParams: PortalQueryParams;
    /**
     * An array of result item objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryResult.html#results)
     */
    results: any[];
    /**
     * The total number of results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryResult.html#total)
     */
    total: number;
  }

  interface PortalQueryResultConstructor {
    new (properties?: PortalQueryResultProperties): PortalQueryResult;
  }

  export const PortalQueryResult: PortalQueryResultConstructor;

  interface PortalQueryResultProperties {
    /**
     * The query parameters for the next set of results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryResult.html#nextQueryParams)
     */
    nextQueryParams?: PortalQueryParamsProperties;
    /**
     * The query parameters for the first set of results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryResult.html#queryParams)
     */
    queryParams?: PortalQueryParamsProperties;
    /**
     * An array of result item objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryResult.html#results)
     */
    results?: any[];
    /**
     * The total number of results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryResult.html#total)
     */
    total?: number;
  }

  interface PortalRating extends Accessor {
    /**
     * Date the rating was added to the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalRating.html#created)
     */
    created: Date;
    /**
     * A rating between 1.0 and 5.0 for the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalRating.html#rating)
     */
    rating: number;
  }

  interface PortalRatingConstructor {
    new (properties?: PortalRatingProperties): PortalRating;
  }

  export const PortalRating: PortalRatingConstructor;

  interface PortalRatingProperties {
    /**
     * Date the rating was added to the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalRating.html#created)
     */
    created?: DateProperties;
    /**
     * A rating between 1.0 and 5.0 for the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalRating.html#rating)
     */
    rating?: number;
  }

  interface PortalUser extends Accessor {
    /**
     * Indicates the level of access of the user. If private, the user descriptive informationwill not be available to others nor will the username be searchable.**Possible Values:** private | org | public
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#access)
     */
    access: string;
    /**
     * The date the user was created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#created)
     */
    created: Date;
    /**
     * The culture information for the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#culture)
     */
    culture: string;
    /**
     * A description of the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#description)
     */
    description: string;
    /**
     * The user's e-mail address.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#email)
     */
    email: string;
    /**
     * The user's full name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#fullName)
     */
    fullName: string;
    /**
     * The date the user was last modified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#modified)
     */
    modified: Date;
    /**
     * The ID of the organization the user belongs to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#orgId)
     */
    orgId: string;
    /**
     * The portal associated with the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#portal)
     */
    portal: Portal;
    /**
     * The user's preferred view for content, either web or GIS.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#preferredView)
     */
    preferredView: string;
    /**
     * The user preferred region, used to set the featured maps on the home page,content in the gallery, and the default extent of new maps in the Viewer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#region)
     */
    region: string;
    /**
     * Defines the user's role in the organization.See [roleId](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#roleId) for more details about when user has a custom role.**Possible Values:** org_admin | org_publisher | org_user
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#role)
     */
    role: string;
    /**
     * The ID of the user's role.  Only set if the user is assigned a custom role.When present, the [role](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#role) will indicate the "base" role of the custom role based on the privilegesthe custom role contains. For example, if the custom role contains some publisher privileges, the[role](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#role) will be set to `org_publisher`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#roleId)
     */
    roleId: string;
    /**
     * The URL to the thumbnail image for the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#thumbnailUrl)
     */
    readonly thumbnailUrl: string;
    /**
     * The user's personal units of measure setting.**Possible Values:** english | metric
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#units)
     */
    units: string;
    /**
     * The URL for the user's content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#userContentUrl)
     */
    readonly userContentUrl: string;
    /**
     * The username of the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#username)
     */
    username: string;

    /**
     * Adds an item to the user's portal content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#addItem)
     *
     * @param params See the object specifications table below for theparameters that may be passed as properties in this object.
     * @param params.item The item to add to the user's content.
     * @param params.data The component used to streamthe data represented by the item to the client.
     * @param params.folder The portal folder inwhich to store the item.
     *
     */
    addItem(params: PortalUserAddItemParams): IPromise<PortalItem>;
    /**
     * Deletes an item from the user's portal content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#deleteItem)
     *
     * @param item The portal item to remove.
     *
     */
    deleteItem(item: PortalItem): IPromise<any>;
    /**
     * Deletes items from the user's portal content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#deleteItems)
     *
     * @param items The portal items to remove.
     *
     */
    deleteItems(items: PortalItem[]): IPromise<any>;
    /**
     * Fetches all of the user's folders used to organize portal content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#fetchFolders)
     *
     *
     */
    fetchFolders(): IPromise<PortalFolder[]>;
    /**
     * Fetches all the groups that the portal user has permission to access.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#fetchGroups)
     *
     *
     */
    fetchGroups(): IPromise<PortalGroup[]>;
    /**
     * Retrieves all the items in the specified folder.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#fetchItems)
     *
     * @param params See the object specifications table below for theparameters that may be passed as properties in this object.
     * @param params.folder The folder to retrieve items from.
     * @param params.num The maximum number of results to be included in the result set response. The maximum value allowedis 100. The start property combined with the num property can be used to paginate the search results.
     * @param params.start The index of the first entry in the result set response. The index is 1-based.
     *
     */
    fetchItems(params?: PortalUserFetchItemsParams): IPromise<any>;
    /**
     * Get the URL to the thumbnail image for the user.Available width sizes: 150, 300 and 600.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#getThumbnailUrl)
     *
     * @param width The desired image width.
     *
     */
    getThumbnailUrl(width?: number): string;
    /**
     * Executes a query against the user's favorite group to return an array of [PortalItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html)objects that match the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#queryFavorites)
     *
     * @param queryParams The input query parametersdefined in [PortalQueryParams](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html). This object may be[autocast](https://developers.arcgis.com/javascript/latest/guide/autocasting/).
     *
     */
    queryFavorites(queryParams?: PortalQueryParams): IPromise<PortalQueryResult>;
  }

  interface PortalUserConstructor {
    new (properties?: PortalUserProperties): PortalUser;
  }

  export const PortalUser: PortalUserConstructor;

  interface PortalUserProperties {
    /**
     * Indicates the level of access of the user. If private, the user descriptive informationwill not be available to others nor will the username be searchable.**Possible Values:** private | org | public
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#access)
     */
    access?: string;
    /**
     * The date the user was created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#created)
     */
    created?: DateProperties;
    /**
     * The culture information for the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#culture)
     */
    culture?: string;
    /**
     * A description of the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#description)
     */
    description?: string;
    /**
     * The user's e-mail address.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#email)
     */
    email?: string;
    /**
     * The user's full name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#fullName)
     */
    fullName?: string;
    /**
     * The date the user was last modified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#modified)
     */
    modified?: DateProperties;
    /**
     * The ID of the organization the user belongs to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#orgId)
     */
    orgId?: string;
    /**
     * The portal associated with the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#portal)
     */
    portal?: PortalProperties;
    /**
     * The user's preferred view for content, either web or GIS.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#preferredView)
     */
    preferredView?: string;
    /**
     * The user preferred region, used to set the featured maps on the home page,content in the gallery, and the default extent of new maps in the Viewer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#region)
     */
    region?: string;
    /**
     * Defines the user's role in the organization.See [roleId](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#roleId) for more details about when user has a custom role.**Possible Values:** org_admin | org_publisher | org_user
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#role)
     */
    role?: string;
    /**
     * The ID of the user's role.  Only set if the user is assigned a custom role.When present, the [role](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#role) will indicate the "base" role of the custom role based on the privilegesthe custom role contains. For example, if the custom role contains some publisher privileges, the[role](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#role) will be set to `org_publisher`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#roleId)
     */
    roleId?: string;
    /**
     * The user's personal units of measure setting.**Possible Values:** english | metric
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#units)
     */
    units?: string;
    /**
     * The username of the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#username)
     */
    username?: string;
  }

  export interface PortalUserAddItemParams extends Object {
    /**
     * The item to add to the user's content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#addItem)
     */
    item: PortalItem;
    /**
     * The component used to streamthe data represented by the item to the client.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#addItem)
     */
    data?: string | any;
    /**
     * The portal folder inwhich to store the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#addItem)
     */
    folder?: string | PortalFolder;
  }

  export interface PortalUserFetchItemsParams extends Object {
    /**
     * The folder to retrieve items from.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#fetchItems)
     */
    folder?: PortalFolder;
    /**
     * The maximum number of results to be included in the result set response. The maximum value allowedis 100. The start property combined with the num property can be used to paginate the search results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#fetchItems)
     *
     * @default 10
     */
    num?: number;
    /**
     * The index of the first entry in the result set response. The index is 1-based.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#fetchItems)
     *
     * @default 1
     */
    start?: number;
  }

  namespace renderers {
    /**
     * SimpleRenderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers.html#SimpleRenderer)
     */
    export type SimpleRenderer = __esri.SimpleRenderer;
    export const SimpleRenderer: typeof __esri.SimpleRenderer;

    /**
     * ClassBreaksRenderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers.html#ClassBreaksRenderer)
     */
    export type ClassBreaksRenderer = __esri.ClassBreaksRenderer;
    export const ClassBreaksRenderer: typeof __esri.ClassBreaksRenderer;

    /**
     * UniqueValueRenderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers.html#UniqueValueRenderer)
     */
    export type UniqueValueRenderer = __esri.UniqueValueRenderer;
    export const UniqueValueRenderer: typeof __esri.UniqueValueRenderer;

    /**
     * DotDensityRenderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers.html#DotDensityRenderer)
     */
    export type DotDensityRenderer = __esri.DotDensityRenderer;
    export const DotDensityRenderer: typeof __esri.DotDensityRenderer;

    /**
     * RendererWithVisualVariables.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers.html#RendererWithVisualVariables)
     */
    export type RendererWithVisualVariables =
      | __esri.SimpleRenderer
      | __esri.ClassBreaksRenderer
      | __esri.UniqueValueRenderer
      | __esri.DotDensityRenderer;

    /**
     * RasterRenderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers.html#RasterRenderer)
     */
    export type RasterRenderer = __esri.ClassBreaksRenderer | __esri.UniqueValueRenderer;

    /**
     * HeatmapRenderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers.html#HeatmapRenderer)
     */
    export type HeatmapRenderer = __esri.HeatmapRenderer;
    export const HeatmapRenderer: typeof __esri.HeatmapRenderer;

    /**
     * Renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers.html#Renderer)
     */
    export type Renderer = __esri.HeatmapRenderer | __esri.RendererWithVisualVariables;
  }

  interface ClassBreaksRenderer extends Renderer, VisualVariablesRenderer {
    /**
     * When symbolizing polygon features with graduated symbols, set a [FillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol.html)on this property to visualize the boundaries of each feature. Use a[FillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol.html) of varying sizes in the [classBreakInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#classBreakInfos)to indicate the quantity.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#backgroundFillSymbol)
     */
    backgroundFillSymbol: FillSymbol | PolygonSymbol3D;
    /**
     * Each element in the array is an object that provides information about a class breakassociated with the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#classBreakInfos)
     */
    classBreakInfos: ClassBreakInfo[];
    /**
     * Label used in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) to describe features assigned the[default symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#defaultSymbol). The [default symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#defaultSymbol) is used to drawall features with unspecified, unmatched values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#defaultLabel)
     */
    defaultLabel: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#defaultSymbol)
     */
    defaultSymbol: Symbol;
    /**
     * The name of a numeric attribute field whose data determinesthe symbol of each feature based on the class breaks definedin [classBreakInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#classBreakInfos).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#field)
     */
    field: string;
    /**
     * An object providing options for displaying the renderer in the Legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#legendOptions)
     */
    legendOptions: ClassBreaksRendererLegendOptions;
    /**
     * When [normalizationType](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationType) is `field`, this property contains theattribute field name used for normalization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationField)
     */
    normalizationField: string;
    /**
     * When [normalizationType](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationType) is `percent-of-total`, this propertycontains the total of all data values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationTotal)
     */
    normalizationTotal: number;
    /**
     * Indicates how the data is normalized. If this property is defined, thenthe class breaks contain a normalizedmin/max value instead of the value in the given [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#field).The data value obtained from the fieldis normalized in one of the following ways before it is compared with the class breaks. See thetable below for a list of possible values.Possible Value | Description---------------|------------field | Divides the data value using the attribute value of the field specified in the [normalizationField](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationField) property. This value is set by default if the [normalizationField](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationField) is provided.log | Computes the base 10 logarithm of the data value. This can be a useful approach for some data distributions because it reduces the influence of very large data values.percent-of-total | Divides the data value by the sum of all data values then multiplies by 100. Use [normalizationTotal](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationTotal) to define the total value by which to normalize. This value is set by default if the [normalizationTotal](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationTotal) is provided.With the exception of `log` normalization, data normalization creates a ratio by dividing two values.When comparing attribute values between features, normalization minimizes the effect of varyingmap areas and the number of observations.For example, dividing the 18 to 30 year old population by thearea of a polygon feature yields a density value that can be compared evenly with other features,regardless of their size.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationType)
     */
    normalizationType: string;
    /**
     * The type of renderer. For ClassBreaksRenderer this value is always `class-breaks`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#type)
     */
    readonly type: "class-breaks";
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression evaluating to a number.This expression can reference field values using the `$feature` global variableand perform mathematical calculations and logical evaluations at runtime.This property is typically used as an alternative to [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#field) fordata-driven visualizations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#valueExpression)
     */
    valueExpression: string;
    /**
     * The title identifying and describing the associated [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html)expression as defined in the [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#valueExpression) property. This is displayedas the title of the corresponding renderer in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html)in the absence of a provided `title` in the [legendOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#legendOptions) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#valueExpressionTitle)
     */
    valueExpressionTitle: string;

    /**
     * Adds a class break to the renderer. You can provide the minimum, maximum and symbol values as individualarguments or by using the info object.The range of the break is greater than or equal to the minimum value and less than the maximum value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#addClassBreakInfo)
     *
     * @param min The minimum value to use in the break. This can be a number or an                             info object as defined in [classBreakInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#classBreakInfos).
     * @param max The maximum value to use in the break.
     * @param symbol Symbol to use for the break.
     *
     */
    addClassBreakInfo(min: number | any, max?: number, symbol?: Symbol): void;
    /**
     * Creates a deep clone of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#clone)
     *
     *
     */
    clone(): ClassBreaksRenderer;
    /**
     * Returns the [classBreakInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#classBreakInfos) information (as defined by the renderer)associated with the given graphic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#getClassBreakInfo)
     *
     * @param graphic The graphic whose rendering information will be returned.
     *
     */
    getClassBreakInfo(graphic: Graphic): IPromise<ClassBreakInfo>;
    /**
     * Removes a break from the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#removeClassBreakInfo)
     *
     * @param min Minimum value in the break to remove
     * @param max Maximum value in the break to remove.
     *
     */
    removeClassBreakInfo(min: number, max: number): void;
  }

  interface ClassBreaksRendererConstructor {
    new (properties?: ClassBreaksRendererProperties): ClassBreaksRenderer;

    fromJSON(json: any): ClassBreaksRenderer;
  }

  export const ClassBreaksRenderer: ClassBreaksRendererConstructor;

  interface ClassBreaksRendererProperties extends RendererProperties, VisualVariablesRendererProperties {
    /**
     * When symbolizing polygon features with graduated symbols, set a [FillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol.html)on this property to visualize the boundaries of each feature. Use a[FillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol.html) of varying sizes in the [classBreakInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#classBreakInfos)to indicate the quantity.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#backgroundFillSymbol)
     */
    backgroundFillSymbol?: FillSymbolProperties | PolygonSymbol3DProperties;
    /**
     * Each element in the array is an object that provides information about a class breakassociated with the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#classBreakInfos)
     */
    classBreakInfos?: ClassBreakInfoProperties[];
    /**
     * Label used in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) to describe features assigned the[default symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#defaultSymbol). The [default symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#defaultSymbol) is used to drawall features with unspecified, unmatched values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#defaultLabel)
     */
    defaultLabel?: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#defaultSymbol)
     */
    defaultSymbol?: SymbolProperties;
    /**
     * The name of a numeric attribute field whose data determinesthe symbol of each feature based on the class breaks definedin [classBreakInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#classBreakInfos).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#field)
     */
    field?: string;
    /**
     * An object providing options for displaying the renderer in the Legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#legendOptions)
     */
    legendOptions?: ClassBreaksRendererLegendOptions;
    /**
     * When [normalizationType](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationType) is `field`, this property contains theattribute field name used for normalization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationField)
     */
    normalizationField?: string;
    /**
     * When [normalizationType](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationType) is `percent-of-total`, this propertycontains the total of all data values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationTotal)
     */
    normalizationTotal?: number;
    /**
     * Indicates how the data is normalized. If this property is defined, thenthe class breaks contain a normalizedmin/max value instead of the value in the given [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#field).The data value obtained from the fieldis normalized in one of the following ways before it is compared with the class breaks. See thetable below for a list of possible values.Possible Value | Description---------------|------------field | Divides the data value using the attribute value of the field specified in the [normalizationField](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationField) property. This value is set by default if the [normalizationField](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationField) is provided.log | Computes the base 10 logarithm of the data value. This can be a useful approach for some data distributions because it reduces the influence of very large data values.percent-of-total | Divides the data value by the sum of all data values then multiplies by 100. Use [normalizationTotal](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationTotal) to define the total value by which to normalize. This value is set by default if the [normalizationTotal](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationTotal) is provided.With the exception of `log` normalization, data normalization creates a ratio by dividing two values.When comparing attribute values between features, normalization minimizes the effect of varyingmap areas and the number of observations.For example, dividing the 18 to 30 year old population by thearea of a polygon feature yields a density value that can be compared evenly with other features,regardless of their size.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationType)
     */
    normalizationType?: string;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression evaluating to a number.This expression can reference field values using the `$feature` global variableand perform mathematical calculations and logical evaluations at runtime.This property is typically used as an alternative to [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#field) fordata-driven visualizations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#valueExpression)
     */
    valueExpression?: string;
    /**
     * The title identifying and describing the associated [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html)expression as defined in the [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#valueExpression) property. This is displayedas the title of the corresponding renderer in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html)in the absence of a provided `title` in the [legendOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#legendOptions) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#valueExpressionTitle)
     */
    valueExpressionTitle?: string;
  }

  export interface ClassBreaksRendererLegendOptions extends Object {
    /**
     * Describes the variable driving the visualization. This is displayedas the title of the corresponding renderer in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) andtakes precedence over a [field alias](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#alias)or [valueExpressionTitle](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#valueExpressionTitle).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#legendOptions)
     */
    title: string;
  }

  interface DotDensityRenderer extends Renderer {
    /**
     * Defines the variable(s) used to visualize density. This is an array of objects, each of which referencesa numeric field value or [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression used to drive the density. Youmust also set a color corresponding to each value.If you set a single attribute, `POPULATION` and match it with a color `black` and the [dotValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#dotValue)is `100`, then number of black dots rendered for each feature will approximately equal the value of`POPULATION` divided by `100`.This property is limited to no more than 8 attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#attributes)
     */
    attributes: AttributeColorInfo[];
    /**
     * The color used to shade the polygon fill behind the dots. This can be autocast with a named string; hex string;array of rgb or rgba values; anobject with `r`, `g`, `b`, and `a` properties; or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#backgroundColor)
     *
     * @default [0, 0, 0, 0.25] - black, semitransparent
     */
    backgroundColor: Color;
    /**
     * Only applicable when two or more [attributes](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#attributes) are specified. When `true`,indicates that colors for overlapping dots will blend. For example, in a feature wherea high density of blue dots exist on top of a high density of red dots, some of the dots mayappear as purple dots if this property is `true`. When `false` only one color will be favored overthe others in rendering.Blend enabled | Blend disabled--------------|---------------![dot-density-blend](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/dot-density-blend.png) | ![dot-density-no-blend](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/dot-density-no-blend.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#dotBlendingEnabled)
     *
     * @default true
     */
    dotBlendingEnabled: boolean;
    /**
     * Defines the initial dot value used for visualizing density. If a [referenceScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#referenceScale)is provided, this value indicates the value of each dot at the [view.scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale)matching the value in [referenceScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#referenceScale). If [referenceScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#referenceScale) is set, the dot value will be recalculated depending on theview scale. Note the value of `dotValue` will remain constant even in this scenario. The variabledot value as displayed in the legend is recalculated using [calculateDotValue()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#calculateDotValue).If a [referenceScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#referenceScale) is not provided, the value specifiedin this property will apply to dots at all scales.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#dotValue)
     */
    dotValue: number;
    /**
     * An object providing options for configuring the renderer in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#legendOptions)
     */
    legendOptions: DotDensityRendererLegendOptions;
    /**
     * The outline of the polygon. When not set, this renders using the default[SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html). It is good practice to explicitly set thisfor every DotDensityRenderer. Either remove the outline altogether, or set it to avery thin, transparent style so it doesn't distract from the dot density.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#outline)
     */
    outline: SimpleLineSymbol;
    /**
     * When defined, the renderer will recalculate the dot value linearly based on the change in the view's scaleusing the [calculateDotValue()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#calculateDotValue) method.The rendering will maintain the density of points as drawn at the provided scale across various scales.However, the dot value will change as the user zooms in or out from the provided scale value, though the valueof [dotValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#dotValue) will remain constant.When the computed dot value reaches `1`, the dot value is no longer recalculated as the user zooms further in.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#referenceScale)
     */
    referenceScale: number;
    /**
     * When set to a consistent value, dot placements will be preserved for the samescale given all parameters are the same in the renderer. By design, dot placement varies for the same featureacross scales.If the user desires to see a different set of dot placements for a given scale, the developer may provide an alternateseed value to recalculate the random placement of dots.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#seed)
     *
     * @default 1
     */
    seed: number;
    /**
     * The type of renderer. For DotDensityRenderer this value is always `dot-density`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#type)
     */
    readonly type: "dot-density";
    /**
     * An array of [Size Visual Variable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html) objects.Only one [ScaleDependentStops](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentStops) visual variableshould be provided. This visual variable is used to vary the [outline](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#outline) width based on the [view.scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale).See the snippet below for an example of this.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#visualVariables)
     */
    visualVariables: ScaleDependentStops[];

    /**
     * Calculates an updated dot value for the given scale for the cases where a [referenceScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#referenceScale)is provided. This allows the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) to update the dot value as the userzooms in or out in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#calculateDotValue)
     *
     * @param scale The view scale at which to calculate a new dot value.
     *
     */
    calculateDotValue(scale: number): number;
    /**
     * Creates a deep clone of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#clone)
     *
     *
     */
    clone(): DotDensityRenderer;
  }

  interface DotDensityRendererConstructor {
    new (properties?: DotDensityRendererProperties): DotDensityRenderer;

    fromJSON(json: any): DotDensityRenderer;
  }

  export const DotDensityRenderer: DotDensityRendererConstructor;

  interface DotDensityRendererProperties extends RendererProperties {
    /**
     * Defines the variable(s) used to visualize density. This is an array of objects, each of which referencesa numeric field value or [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression used to drive the density. Youmust also set a color corresponding to each value.If you set a single attribute, `POPULATION` and match it with a color `black` and the [dotValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#dotValue)is `100`, then number of black dots rendered for each feature will approximately equal the value of`POPULATION` divided by `100`.This property is limited to no more than 8 attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#attributes)
     */
    attributes?: AttributeColorInfoProperties[];
    /**
     * The color used to shade the polygon fill behind the dots. This can be autocast with a named string; hex string;array of rgb or rgba values; anobject with `r`, `g`, `b`, and `a` properties; or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#backgroundColor)
     *
     * @default [0, 0, 0, 0.25] - black, semitransparent
     */
    backgroundColor?: Color | number[] | string;
    /**
     * Only applicable when two or more [attributes](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#attributes) are specified. When `true`,indicates that colors for overlapping dots will blend. For example, in a feature wherea high density of blue dots exist on top of a high density of red dots, some of the dots mayappear as purple dots if this property is `true`. When `false` only one color will be favored overthe others in rendering.Blend enabled | Blend disabled--------------|---------------![dot-density-blend](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/dot-density-blend.png) | ![dot-density-no-blend](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/dot-density-no-blend.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#dotBlendingEnabled)
     *
     * @default true
     */
    dotBlendingEnabled?: boolean;
    /**
     * Defines the initial dot value used for visualizing density. If a [referenceScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#referenceScale)is provided, this value indicates the value of each dot at the [view.scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale)matching the value in [referenceScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#referenceScale). If [referenceScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#referenceScale) is set, the dot value will be recalculated depending on theview scale. Note the value of `dotValue` will remain constant even in this scenario. The variabledot value as displayed in the legend is recalculated using [calculateDotValue()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#calculateDotValue).If a [referenceScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#referenceScale) is not provided, the value specifiedin this property will apply to dots at all scales.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#dotValue)
     */
    dotValue?: number;
    /**
     * An object providing options for configuring the renderer in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#legendOptions)
     */
    legendOptions?: DotDensityRendererLegendOptions;
    /**
     * The outline of the polygon. When not set, this renders using the default[SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html). It is good practice to explicitly set thisfor every DotDensityRenderer. Either remove the outline altogether, or set it to avery thin, transparent style so it doesn't distract from the dot density.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#outline)
     */
    outline?: SimpleLineSymbolProperties;
    /**
     * When defined, the renderer will recalculate the dot value linearly based on the change in the view's scaleusing the [calculateDotValue()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#calculateDotValue) method.The rendering will maintain the density of points as drawn at the provided scale across various scales.However, the dot value will change as the user zooms in or out from the provided scale value, though the valueof [dotValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#dotValue) will remain constant.When the computed dot value reaches `1`, the dot value is no longer recalculated as the user zooms further in.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#referenceScale)
     */
    referenceScale?: number;
    /**
     * When set to a consistent value, dot placements will be preserved for the samescale given all parameters are the same in the renderer. By design, dot placement varies for the same featureacross scales.If the user desires to see a different set of dot placements for a given scale, the developer may provide an alternateseed value to recalculate the random placement of dots.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#seed)
     *
     * @default 1
     */
    seed?: number;
    /**
     * An array of [Size Visual Variable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html) objects.Only one [ScaleDependentStops](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentStops) visual variableshould be provided. This visual variable is used to vary the [outline](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#outline) width based on the [view.scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale).See the snippet below for an example of this.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#visualVariables)
     */
    visualVariables?: ScaleDependentStops[];
  }

  export interface DotDensityRendererLegendOptions extends Object {
    /**
     * Indicates the unit of the data being visualized.  this will display next to the dot value in the title of the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#legendOptions)
     */
    unit?: string;
  }

  interface HeatmapRenderer extends Renderer {
    /**
     * The area of influence for each point in the layer. This is defined as a radius in pixels.The default is `10`, which means the pixels within a 10-pixel radius of the point's location are assignedan intensity value corresponding to their distance from the nearby point. Increasing this value creates alarger heatmap with more hotspots. Decreasing it makes a smaller heatmap with fewer hotspots.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#blurRadius)
     *
     * @default 10
     */
    blurRadius: number;
    /**
     * An array of objects describing the renderer's color ramp. The ratio of a pixel's intensity value to the[maxPixelIntensity](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#maxPixelIntensity) of the renderer is mapped to a corresponding [color](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#color)along a continuous ramp. The color of the first stop (i.e. the stop with the lowest `ratio` value) musthave an alpha value of `0` for the underlying basemap to be visible in the app.The default value is the following:```js[  { ratio: 0, color: "rgba(255, 140, 0, 0)" },  { ratio: 0.75, color: "rgba(255, 140, 0, 1)" },  { ratio: 0.9, color: "rgba(255, 0,   0, 1)" }]```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#colorStops)
     */
    colorStops: HeatmapColorStop[];
    /**
     * The name of the attribute field used to weight the intensity of each heatmap point.For example, suppose you have a layer of points representing buildings containing afield `num_units` for the number of units in the building (if it's an apartment complex). You couldweight the heatmap renderer based on the `num_units` field to create a heatmap representingthe density of housing units in a city.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#field)
     */
    field: string;
    /**
     * The pixel intensity value that determines which pixels are assigned the final color in the [colorStops](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#colorStops).Pixelx with intensity values above this number will be assigned the final (or hottest) color in the color ramp.Typically, `minPixelIntensity` will be zero and `maxPixelIntensity` will be setto a high value appropriate for the dataset. The default may not be ideal for your dataset,so this value will likely need to change.Determining the best values for`minPixelIntensity` and `maxPixelIntensity` is an exercise left up to the developer since different types,scales, densities, and distributions of data will require different values for these properties to create avisually pleasing separation of high and low intensity areas appropriate for the data and the application.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#maxPixelIntensity)
     *
     * @default 100
     */
    maxPixelIntensity: number;
    /**
     * The pixel intensity value used to determine which pixels will be assigned the initial color in the [colorStops](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#colorStops).Pixels with intensity values below this number will be excluded from the visualization.When using a [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#field) to weight the points, setting `minPixelIntensity` above zero might help to visually deemphasizefrequently occurring but low value point clusters. This property does not actually filter the data ormodify the calculated intensity value. Rather, it scales the color ramp such that a higherintensity value is required for a pixel to get a noticeable color.Determining the best values for`minPixelIntensity` and  `maxPixelIntensity` is an exercise left up to the developer since different types,scales, densities, and distributions of data will require different values for these properties to create avisually pleasing separation of high and low intensity areas appropriate for the data and the application.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#minPixelIntensity)
     *
     * @default 0
     */
    minPixelIntensity: number;
    /**
     * The type of renderer. For HeatmapRenderer this value is always `heatmap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#type)
     */
    readonly type: "heatmap";

    /**
     * Creates a deep clone of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#clone)
     *
     *
     */
    clone(): HeatmapRenderer;
  }

  interface HeatmapRendererConstructor {
    new (properties?: HeatmapRendererProperties): HeatmapRenderer;

    fromJSON(json: any): HeatmapRenderer;
  }

  export const HeatmapRenderer: HeatmapRendererConstructor;

  interface HeatmapRendererProperties extends RendererProperties {
    /**
     * The area of influence for each point in the layer. This is defined as a radius in pixels.The default is `10`, which means the pixels within a 10-pixel radius of the point's location are assignedan intensity value corresponding to their distance from the nearby point. Increasing this value creates alarger heatmap with more hotspots. Decreasing it makes a smaller heatmap with fewer hotspots.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#blurRadius)
     *
     * @default 10
     */
    blurRadius?: number;
    /**
     * An array of objects describing the renderer's color ramp. The ratio of a pixel's intensity value to the[maxPixelIntensity](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#maxPixelIntensity) of the renderer is mapped to a corresponding [color](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#color)along a continuous ramp. The color of the first stop (i.e. the stop with the lowest `ratio` value) musthave an alpha value of `0` for the underlying basemap to be visible in the app.The default value is the following:```js[  { ratio: 0, color: "rgba(255, 140, 0, 0)" },  { ratio: 0.75, color: "rgba(255, 140, 0, 1)" },  { ratio: 0.9, color: "rgba(255, 0,   0, 1)" }]```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#colorStops)
     */
    colorStops?: HeatmapColorStopProperties[];
    /**
     * The name of the attribute field used to weight the intensity of each heatmap point.For example, suppose you have a layer of points representing buildings containing afield `num_units` for the number of units in the building (if it's an apartment complex). You couldweight the heatmap renderer based on the `num_units` field to create a heatmap representingthe density of housing units in a city.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#field)
     */
    field?: string;
    /**
     * The pixel intensity value that determines which pixels are assigned the final color in the [colorStops](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#colorStops).Pixelx with intensity values above this number will be assigned the final (or hottest) color in the color ramp.Typically, `minPixelIntensity` will be zero and `maxPixelIntensity` will be setto a high value appropriate for the dataset. The default may not be ideal for your dataset,so this value will likely need to change.Determining the best values for`minPixelIntensity` and `maxPixelIntensity` is an exercise left up to the developer since different types,scales, densities, and distributions of data will require different values for these properties to create avisually pleasing separation of high and low intensity areas appropriate for the data and the application.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#maxPixelIntensity)
     *
     * @default 100
     */
    maxPixelIntensity?: number;
    /**
     * The pixel intensity value used to determine which pixels will be assigned the initial color in the [colorStops](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#colorStops).Pixels with intensity values below this number will be excluded from the visualization.When using a [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#field) to weight the points, setting `minPixelIntensity` above zero might help to visually deemphasizefrequently occurring but low value point clusters. This property does not actually filter the data ormodify the calculated intensity value. Rather, it scales the color ramp such that a higherintensity value is required for a pixel to get a noticeable color.Determining the best values for`minPixelIntensity` and  `maxPixelIntensity` is an exercise left up to the developer since different types,scales, densities, and distributions of data will require different values for these properties to create avisually pleasing separation of high and low intensity areas appropriate for the data and the application.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#minPixelIntensity)
     *
     * @default 0
     */
    minPixelIntensity?: number;
  }

  interface VisualVariablesRenderer {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-mixins-VisualVariablesRenderer.html#visualVariables)
     */
    visualVariables: VisualVariable[];
  }

  interface VisualVariablesRendererConstructor {
    new (): VisualVariablesRenderer;
  }

  export const VisualVariablesRenderer: VisualVariablesRendererConstructor;

  interface VisualVariablesRendererProperties {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-mixins-VisualVariablesRenderer.html#visualVariables)
     */
    visualVariables?: VisualVariableProperties[];
  }

  interface PointCloudClassBreaksRenderer extends PointCloudRenderer {
    /**
     * Each element in the array is an object that provides information about a class breakassociated with the renderer. Each object has the following specification:
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudClassBreaksRenderer.html#colorClassBreakInfos)
     */
    colorClassBreakInfos: PointCloudClassBreaksRendererColorClassBreakInfos[];
    /**
     * The name of the field that is used to drive the color visualization for the renderer.The value of this field determines which class break each point is assigned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudClassBreaksRenderer.html#field)
     */
    field: string;
    /**
     * A transform that is applied to the field value before evaluating the renderer.**Possible Values:** none | low-four-bit | high-four-bit | absolute-value | modulo-ten
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudClassBreaksRenderer.html#fieldTransformType)
     *
     * @default null
     */
    fieldTransformType: string;
    /**
     * An object providing options for displaying the renderer in the Legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudClassBreaksRenderer.html#legendOptions)
     */
    legendOptions: PointCloudClassBreaksRendererLegendOptions;
    /**
     * The type of renderer. For PointCloudClassBreaksRenderer this value is always `point-cloud-class-breaks`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudClassBreaksRenderer.html#type)
     */
    readonly type: "point-cloud-class-breaks";

    /**
     * Creates a deep clone of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudClassBreaksRenderer.html#clone)
     *
     *
     */
    clone(): PointCloudClassBreaksRenderer;
  }

  interface PointCloudClassBreaksRendererConstructor {
    new (properties?: PointCloudClassBreaksRendererProperties): PointCloudClassBreaksRenderer;

    fromJSON(json: any): PointCloudClassBreaksRenderer;
  }

  export const PointCloudClassBreaksRenderer: PointCloudClassBreaksRendererConstructor;

  interface PointCloudClassBreaksRendererProperties extends PointCloudRendererProperties {
    /**
     * Each element in the array is an object that provides information about a class breakassociated with the renderer. Each object has the following specification:
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudClassBreaksRenderer.html#colorClassBreakInfos)
     */
    colorClassBreakInfos?: PointCloudClassBreaksRendererColorClassBreakInfos[];
    /**
     * The name of the field that is used to drive the color visualization for the renderer.The value of this field determines which class break each point is assigned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudClassBreaksRenderer.html#field)
     */
    field?: string;
    /**
     * A transform that is applied to the field value before evaluating the renderer.**Possible Values:** none | low-four-bit | high-four-bit | absolute-value | modulo-ten
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudClassBreaksRenderer.html#fieldTransformType)
     *
     * @default null
     */
    fieldTransformType?: string;
    /**
     * An object providing options for displaying the renderer in the Legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudClassBreaksRenderer.html#legendOptions)
     */
    legendOptions?: PointCloudClassBreaksRendererLegendOptions;
  }

  export interface PointCloudClassBreaksRendererColorClassBreakInfos extends Object {
    /**
     * The minimum value of the break.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudClassBreaksRenderer.html#colorClassBreakInfos)
     */
    minValue: number;
    /**
     * The maximum value of the break.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudClassBreaksRenderer.html#colorClassBreakInfos)
     */
    maxValue: number;
    /**
     * The color used to colorize the points where          values are between the `minValue` and `maxValue` of the break.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudClassBreaksRenderer.html#colorClassBreakInfos)
     */
    color: Color;
    /**
     * The label used to describe point in the break.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudClassBreaksRenderer.html#colorClassBreakInfos)
     */
    label?: string;
  }

  export interface PointCloudClassBreaksRendererLegendOptions extends Object {
    /**
     * Describes the variable driving the visualization. This is displayedas the title of the corresponding renderer in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) andtakes precedence over a [field alias](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#alias).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudClassBreaksRenderer.html#legendOptions)
     */
    title?: string;
  }

  interface PointCloudRenderer extends Accessor, JSONSupport {
    /**
     * Reduces the brightness of the point's color, based on the value of another field, usually `intensity`.High values leave the color unchanged, while low values darken the color of the point. This helps todisplay the scanned surface in a more realistic way.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#colorModulation)
     */
    colorModulation: PointCloudRendererColorModulation;
    /**
     * Specifies how the size of the points in the point cloud is computed forrendering.The splat algorithm automatically computes a size based on the density,which varies with the Level of Detail that is currently displayed.The fixed size algorithm displays all points with the same size, eitherin screen space or real world units.When `pointSizeAlgorithm` is not set, the default is `splat`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#pointSizeAlgorithm)
     */
    pointSizeAlgorithm: PointCloudRendererPointSizeAlgorithm;
    /**
     * The number of points to draw per display inch. This property determines the level ofdetail in the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#pointsPerInch)
     *
     * @default 10
     */
    pointsPerInch: number;
    /**
     * The point cloud renderer type.**Possible values:** point-cloud-class-breaks | point-cloud-rgb | point-cloud-stretch | point-cloud-unique-value
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#type)
     */
    readonly type: string;

    /**
     * Creates a deep clone of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#clone)
     *
     *
     */
    clone(): PointCloudRenderer;
  }

  interface PointCloudRendererConstructor {
    new (properties?: PointCloudRendererProperties): PointCloudRenderer;

    fromJSON(json: any): PointCloudRenderer;
  }

  export const PointCloudRenderer: PointCloudRendererConstructor;

  interface PointCloudRendererProperties {
    /**
     * Reduces the brightness of the point's color, based on the value of another field, usually `intensity`.High values leave the color unchanged, while low values darken the color of the point. This helps todisplay the scanned surface in a more realistic way.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#colorModulation)
     */
    colorModulation?: PointCloudRendererColorModulation;
    /**
     * Specifies how the size of the points in the point cloud is computed forrendering.The splat algorithm automatically computes a size based on the density,which varies with the Level of Detail that is currently displayed.The fixed size algorithm displays all points with the same size, eitherin screen space or real world units.When `pointSizeAlgorithm` is not set, the default is `splat`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#pointSizeAlgorithm)
     */
    pointSizeAlgorithm?: PointCloudRendererPointSizeAlgorithm;
    /**
     * The number of points to draw per display inch. This property determines the level ofdetail in the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#pointsPerInch)
     *
     * @default 10
     */
    pointsPerInch?: number;
  }

  export interface PointCloudRendererColorModulation extends Object {
    /**
     * Field to use for the color modulation. Commonly modulation                         is used with the `intensity` field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#colorModulation)
     */
    field: string;
    /**
     * Field value at which the point color becomes darkest.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#colorModulation)
     *
     * @default 0
     */
    minValue?: number;
    /**
     * Field value at which the point color will be left unchanged.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#colorModulation)
     *
     * @default 255
     */
    maxValue?: number;
  }

  export interface PointCloudRendererPointSizeAlgorithm extends Object {
    /**
     * `fixed-size` or `splat`. Choosing `fixed-size` impliessetting `size` and `useRealWorldSymbolSizes`. If `splat` is chosen then `scaleFactor` should be set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#pointSizeAlgorithm)
     */
    type: string;
    /**
     * Specifies whether `size` is in real world units or screen-space units.Applies to `fixed-size` only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#pointSizeAlgorithm)
     */
    useRealWorldSymbolSizes?: boolean;
    /**
     * Point size in meters (`useRealWorldSymbolSizes = true`) or points.Applies to `fixed-size` only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#pointSizeAlgorithm)
     */
    size?: number;
    /**
     * Specifies the scale factor that is applied to the size estimated by the density.Applies to `splat` only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#pointSizeAlgorithm)
     *
     * @default 1
     */
    scaleFactor?: number;
  }

  interface PointCloudRGBRenderer extends PointCloudRenderer {
    /**
     * The name of the field containing RGB values used to drive the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRGBRenderer.html#field)
     */
    field: string;
    /**
     * The type of Renderer. For PointCloudRGBRenderer this value is always `point-cloud-rgb`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRGBRenderer.html#type)
     */
    readonly type: "point-cloud-rgb";

    /**
     * Creates a deep clone of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRGBRenderer.html#clone)
     *
     *
     */
    clone(): PointCloudRGBRenderer;
  }

  interface PointCloudRGBRendererConstructor {
    new (properties?: PointCloudRGBRendererProperties): PointCloudRGBRenderer;

    fromJSON(json: any): PointCloudRGBRenderer;
  }

  export const PointCloudRGBRenderer: PointCloudRGBRendererConstructor;

  interface PointCloudRGBRendererProperties extends PointCloudRendererProperties {
    /**
     * The name of the field containing RGB values used to drive the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRGBRenderer.html#field)
     */
    field?: string;
  }

  interface PointCloudStretchRenderer extends PointCloudRenderer {
    /**
     * The name of the number field whose values are used to drive the continuous color visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html#field)
     */
    field: string;
    /**
     * A transform that is applied to the field value before evaluating the renderer.**Possible Values:** none | low-four-bit | high-four-bit | absolute-value | modulo-ten
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html#fieldTransformType)
     *
     * @default null
     */
    fieldTransformType: string;
    /**
     * An object providing options for displaying the renderer in the Legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html#legendOptions)
     */
    legendOptions: PointCloudStretchRendererLegendOptions;
    /**
     * An array of color value pairs. Points with valuesbetween the specified stops are colorized withlinearly interpolated colors.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html#stops)
     */
    stops: PointCloudStretchRendererStops[];
    /**
     * The type of Renderer. For PointCloudStretchRenderer this value is always `point-cloud-stretch`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html#type)
     */
    readonly type: "point-cloud-stretch";

    /**
     * Creates a deep clone of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html#clone)
     *
     *
     */
    clone(): PointCloudStretchRenderer;
  }

  interface PointCloudStretchRendererConstructor {
    new (properties?: PointCloudStretchRendererProperties): PointCloudStretchRenderer;

    fromJSON(json: any): PointCloudStretchRenderer;
  }

  export const PointCloudStretchRenderer: PointCloudStretchRendererConstructor;

  interface PointCloudStretchRendererProperties extends PointCloudRendererProperties {
    /**
     * The name of the number field whose values are used to drive the continuous color visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html#field)
     */
    field?: string;
    /**
     * A transform that is applied to the field value before evaluating the renderer.**Possible Values:** none | low-four-bit | high-four-bit | absolute-value | modulo-ten
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html#fieldTransformType)
     *
     * @default null
     */
    fieldTransformType?: string;
    /**
     * An object providing options for displaying the renderer in the Legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html#legendOptions)
     */
    legendOptions?: PointCloudStretchRendererLegendOptions;
    /**
     * An array of color value pairs. Points with valuesbetween the specified stops are colorized withlinearly interpolated colors.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html#stops)
     */
    stops?: PointCloudStretchRendererStops[];
  }

  export interface PointCloudStretchRendererLegendOptions extends Object {
    /**
     * Describes the variable driving the visualization. This is displayedas the title of the corresponding renderer in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) andtakes precedence over a [field alias](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#alias).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html#legendOptions)
     */
    title?: string;
  }

  export interface PointCloudStretchRendererStops extends Object {
    /**
     * The value for this stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html#stops)
     */
    value: number;
    /**
     * The label for this stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html#stops)
     */
    label?: string;
    /**
     * The color value for this stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html#stops)
     */
    color: Color;
  }

  interface PointCloudUniqueValueRenderer extends PointCloudRenderer {
    /**
     * Each element in the array is an object that matches a unique valuewith a specific color. Features with equal values to those specified herewill be assigned the associated color. For example, you may choose to visualizepoints representing low vegetation with a green color and points representing powerlines with a gray color. Each object has the following specification:
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html#colorUniqueValueInfos)
     */
    colorUniqueValueInfos: PointCloudUniqueValueRendererColorUniqueValueInfos[];
    /**
     * The name of the field whose values are used to drive the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html#field)
     */
    field: string;
    /**
     * A transform that is applied to the field value before evaluating the renderer.**Possible Values:** none | low-four-bit | high-four-bit | absolute-value | modulo-ten
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html#fieldTransformType)
     *
     * @default null
     */
    fieldTransformType: string;
    /**
     * An object providing options for displaying the renderer in the Legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html#legendOptions)
     */
    legendOptions: PointCloudUniqueValueRendererLegendOptions;
    /**
     * The type of Renderer. For PointCloudUniqueValueRenderer this value is always `point-cloud-unique-value`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html#type)
     */
    readonly type: "point-cloud-unique-value";

    /**
     * Creates a deep clone of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html#clone)
     *
     *
     */
    clone(): PointCloudUniqueValueRenderer;
  }

  interface PointCloudUniqueValueRendererConstructor {
    new (properties?: PointCloudUniqueValueRendererProperties): PointCloudUniqueValueRenderer;

    fromJSON(json: any): PointCloudUniqueValueRenderer;
  }

  export const PointCloudUniqueValueRenderer: PointCloudUniqueValueRendererConstructor;

  interface PointCloudUniqueValueRendererProperties extends PointCloudRendererProperties {
    /**
     * Each element in the array is an object that matches a unique valuewith a specific color. Features with equal values to those specified herewill be assigned the associated color. For example, you may choose to visualizepoints representing low vegetation with a green color and points representing powerlines with a gray color. Each object has the following specification:
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html#colorUniqueValueInfos)
     */
    colorUniqueValueInfos?: PointCloudUniqueValueRendererColorUniqueValueInfos[];
    /**
     * The name of the field whose values are used to drive the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html#field)
     */
    field?: string;
    /**
     * A transform that is applied to the field value before evaluating the renderer.**Possible Values:** none | low-four-bit | high-four-bit | absolute-value | modulo-ten
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html#fieldTransformType)
     *
     * @default null
     */
    fieldTransformType?: string;
    /**
     * An object providing options for displaying the renderer in the Legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html#legendOptions)
     */
    legendOptions?: PointCloudUniqueValueRendererLegendOptions;
  }

  export interface PointCloudUniqueValueRendererColorUniqueValueInfos extends Object {
    /**
     * A unique combination of values that will be             represented with the given `color`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html#colorUniqueValueInfos)
     */
    values: string[];
    /**
     * The color used to represent points whose value matches `values`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html#colorUniqueValueInfos)
     */
    color: Color;
    /**
     * Label used to describe points matched to the unique value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html#colorUniqueValueInfos)
     */
    label?: string;
  }

  export interface PointCloudUniqueValueRendererLegendOptions extends Object {
    /**
     * Describes the variable driving the visualization. This is displayedas the title of the corresponding renderer in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) andtakes precedence over a [field alias](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#alias).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html#legendOptions)
     */
    title?: string;
  }

  interface Renderer extends Accessor, JSONSupport {
    /**
     * Authoring metadata only included in renderers generated from one of theSmart Mapping creator methods, such as[sizeRendererCreator.createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer) or[colorRendererCreator.createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer). This includes information from UIelements such as sliders and selected classification methodsand themes. This allows the authoring clients to save specific overridable settingsso that next time it is accessed via the UI, their selections can be remembered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html#authoringInfo)
     */
    authoringInfo: AuthoringInfo;
    /**
     * The renderer type.**Possible values:** class-breaks | heatmap | simple | unique-value | raster-stretch
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html#type)
     */
    readonly type: string;
  }

  interface RendererConstructor {
    new (properties?: RendererProperties): Renderer;

    fromJSON(json: any): Renderer;
  }

  export const Renderer: RendererConstructor;

  interface RendererProperties {
    /**
     * Authoring metadata only included in renderers generated from one of theSmart Mapping creator methods, such as[sizeRendererCreator.createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer) or[colorRendererCreator.createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer). This includes information from UIelements such as sliders and selected classification methodsand themes. This allows the authoring clients to save specific overridable settingsso that next time it is accessed via the UI, their selections can be remembered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html#authoringInfo)
     */
    authoringInfo?: AuthoringInfoProperties;
  }

  interface SimpleRenderer extends Renderer, VisualVariablesRenderer {
    /**
     * The label for the renderer. This describes what features with the given [symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-SimpleRenderer.html#symbol)represent in the real world. This will display next to the layer's [symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-SimpleRenderer.html#symbol)inside the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.This text is not displayed in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) when[visualVariables](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-SimpleRenderer.html#visualVariables) are used. When the renderer contains[visualVariables](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-SimpleRenderer.html#visualVariables), you should set the `title` property in`legendOptions` on each visual variable to describe the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-SimpleRenderer.html#label)
     */
    label: string;
    /**
     * The symbol used by the renderer to visualize all features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-SimpleRenderer.html#symbol)
     */
    symbol: Symbol;
    /**
     * The type of renderer. For SimpleRenderer this value is always `simple`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-SimpleRenderer.html#type)
     */
    readonly type: "simple";

    /**
     * Creates a deep clone of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-SimpleRenderer.html#clone)
     *
     *
     */
    clone(): SimpleRenderer;
  }

  interface SimpleRendererConstructor {
    new (properties?: SimpleRendererProperties): SimpleRenderer;

    fromJSON(json: any): SimpleRenderer;
  }

  export const SimpleRenderer: SimpleRendererConstructor;

  interface SimpleRendererProperties extends RendererProperties, VisualVariablesRendererProperties {
    /**
     * The label for the renderer. This describes what features with the given [symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-SimpleRenderer.html#symbol)represent in the real world. This will display next to the layer's [symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-SimpleRenderer.html#symbol)inside the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.This text is not displayed in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) when[visualVariables](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-SimpleRenderer.html#visualVariables) are used. When the renderer contains[visualVariables](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-SimpleRenderer.html#visualVariables), you should set the `title` property in`legendOptions` on each visual variable to describe the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-SimpleRenderer.html#label)
     */
    label?: string;
    /**
     * The symbol used by the renderer to visualize all features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-SimpleRenderer.html#symbol)
     */
    symbol?: SymbolProperties;
  }

  interface color {
    /**
     * Generates a continuous color [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html) representing the age of features basedon one or more fields. The age of a feature is calculated based on a given `startTime` and `endTime`, one of whichmust be a date field in the input `layer`. This method generates an Arcade expression and calculates statistics on theoutput of the expression to accomplish this. The resultingrenderer contains a continuous color visual variable that maps optimal colors based on the indicated basemapto data values based on the resulting statistics of the expression.You are required to provide a `layer`, `view`, `startTime`, and `endTime` to generate this renderer. Optionally, you canset a `unit` and a `theme` for the visualization. Other options are provided for convenience for more involved custom visualization authoringapplications. For example, if you already generated statistics in another operation, youcan pass the statistics object to the `statistics` parameter to avoid making an extra call to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createAgeRenderer)
     *
     * @param params Input parameters for generating a continuous color visualization of age for time datareturned from start and/or end date field(s). See the table below for details of each parameter.
     * @param params.layer The layer  for which the visualization is generated.
     * @param params.view The view instance in which the visualization will be rendered.
     * @param params.startTime The name of the field, or a date value representing the start time in the  age calculation. If a date value is specified, then the `endTime` parameter must reference a Date field in the layer.
     * @param params.endTime The name of the field, or a date value representing the end time in the  age calculation. If a date value is specified, then the `startTime` parameter must reference a Date field in the layer.
     * @param params.unit The time unit used to calculate the difference between `endTime` and `startTime`. If a unit  is not specified, then a suggested unit is determined based on the spread and distribution of the data.  **Possible Values:** years | months | days | hours | minutes | seconds
     * @param params.basemap The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of  the Esri basemap that will be paired with the output visualization.
     * @param params.theme Determines which values will be emphasized in the continuous ramp and the map.  Possible values are listed below.  | Value | Description | Example |  | ----- | ----------- | ------- |  | high-to-low | High values are emphasized with strong colors. | ![high-to-low](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-high-to-low.png) |  | above-and-below | Values centered around a given point (e.g. the average) are visualized with weak colors while other values are emphasized with strong colors. | ![above-and-below](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-above-and-below.png) |  | centered-on | Values centered around a given point (e.g. the average) are emphasized with strong colors while other values are visualized with weak colors. | ![centered-on](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-centered-on.png) |  | extremes | High and low values are emphasized with strong colors. All others are visualized with weak colors. | ![extremes](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-extremes.png) |
     * @param params.outlineOptimizationEnabled For polygon layers only. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     * @param params.legendOptions Provides options for modifying [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) properties describing  the visualization.
     * @param params.statistics A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.  The `createAgeRenderer()` method generates an Arcade expression and executes a statistics query against the layer for the result of the expression.  If statistics for the expression have already been generated, then pass the object here to avoid making a second statistics  query.
     * @param params.colorScheme In authoring apps,  the user may select a pre-defined color scheme. Pass the scheme object to this property to avoid getting one  based on a `theme` and the `basemap`.
     * @param params.symbolType The type of symbol to generate. This depends on the view  in which you are working and the desired visualization. This parameter does not need to be specified for layers  with a `mesh` geometry type. Possible values are described below.  | Value | Description |  | ----- | ----------- |  | 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). |  | 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). |  | 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). A SceneView instance must be provided to the `view` parameter if this option is used. |
     * @param params.defaultSymbolEnabled Enables the `defaultSymbol` on the renderer and assigns it to features  with no value.
     * @param params.colorMixMode **This option only applies to generating renderers for mesh SceneLayers**.  Specifies how the symbol's color is applied to the geometry color/texture. See the documentation in  [FillSymbol3DLayer.material](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material) for more context.  See the table below for possible values.  Value | Description  ------|------------  tint | Applies the symbol `color` to the desaturated geometry/texture color.  replace | Removes the geometry/texture color and applies the symbol `color`.  multiply | Multiplies geometry/texture color value with the symbol `color` value. The result is a darker color. Multiplying with white keeps the geometry color the same.
     *
     */
    createAgeRenderer(params: colorCreateAgeRendererParams): IPromise<AgeRendererResult>;
    /**
     * Generates a [ClassBreaksRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html) that may be applied directly to thelayer used to call this method. The resulting renderer defines the symbol color of each featurebased on the value of the given `field` value. A default color scheme is determined based on the given `basemap`.Depending on the `classificationMethod`, class breaks (or data ranges) are generated based on the statistics of the data.Each feature is assigned a color based on the class break in which the value of the `field` falls.In most cases you will provide a `layer`, `basemap`, `field`, and `classificationMethod` to generate this renderer.This is a scenario in whichthe statistics of the data aren't well known and the user doesn't know what colorsto use in the visualization. You can also use a `valueExpression` instead of a `field` to visualizefeatures based on a value returned from a script executed at runtime.The other options are provided for convenience for more involved custom visualization authoringapplications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     *
     * @param params Input parameters for generating a classed color visualization based on datareturned from a given field or expression. See the table below for details of each parameter.
     * @param params.layer The layer for which the visualizationis generated.
     * @param params.field The name of the field whose data will be queried for statistics and classified.  This property is ignored if a `valueExpression` is used.
     * @param params.normalizationField The name of the field to normalize the values of the given`field`. Providing a normalization field helps minimize some visualization errors and standardizes the dataso all features are visualized with minimal bias due to area differences or count variation. This option iscommonly used when visualizing densities.
     * @param params.normalizationType Indicates how the data is normalized.The data value obtained from the `field`is normalized in one of the following ways before it is compared with the class breaks. See thetable below for a list of possible values.Possible Value | Description---------------|------------field | Divides the `field` value by the value of `normalizationField`. This value is set by default if the `normalizationField` is provided.log | Computes the base 10 logarithm of the data value. This can be a useful approach for some data distributions because it reduces the influence of very large data values.percent-of-total | Divides the data value by the sum of all data values then multiplies by 100. Use `normalizationTotal` to define the total value by which to normalize. This value is set by default if the `normalizationTotal` is provided.With the exception of `log` normalization, data normalization creates a ratio by dividing two values.When comparing attribute values between features, normalization minimizes the effect of varyingmap areas and the number of observations. For example, dividing the 18 to 30 year old population by thearea of a polygon feature yields a density value that can be compared evenly with other features,regardless of their size.
     * @param params.normalizationTotal When `normalizationType` is `percent-of-total`, this property contains the total of all data values.
     * @param params.basemap The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     * @param params.classificationMethod The classification method used for generating breaks.See the table below for a list of possible values.Possible Value | Description---------------|------------equal-interval | Divides the range of attribute values into equal-sized subranges. For example, if you specify three classes for a field whose values range from 0 to 300, this method will create three classes with ranges of 0–100, 101–200, and 201–300. Equal interval is best applied to familiar data ranges, such as percentages and temperature. This method emphasizes the amount of an attribute value relative to other values. For example, it could show if a store is part of the group of stores that make up the top one-third of all sales.natural-breaks | Groups similar values that maximize the differences between classes. Features are divided into classes whose boundaries are set where there are relatively big differences in the data values. Natural breaks are data-specific classifications and not useful for comparing multiple maps built from different underlying information.quantile | Assigns the same number of data values to each class. This is well suited to linearly distributed data. Because features are grouped in equal numbers in each class, the resulting map can often be misleading. Similar features can potentially be placed in adjacent classes, or features with widely different values can be put in the same class. You can minimize this distortion by increasing the number of classes.standard-deviation | Creates class breaks with equal value ranges that are a proportion of the standard deviation. This is usually done at intervals of one, one-half, one-third, or one-fourth standard deviations from the mean.
     * @param params.standardDeviationInterval If a `standard-deviation` classification method is used, then this indicates the interval by which to generate class breaks.**Possible Values:** 1 | 0.5 | 0.33 | 0.25
     * @param params.numClasses The number of class breaks to generate. This is ignored if a `standard-deviation` classification method is specified.
     * @param params.colorScheme In authoring apps,the user may select a pre-defined color scheme. Pass the scheme object to this property to avoid getting onebased on the `basemap`.
     * @param params.valueExpression An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     * @param params.valueExpressionTitle Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     * @param params.sqlExpression A SQL expression evaluating to a number.
     * @param params.sqlWhere A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     * @param params.outlineOptimizationEnabled For polygon layers only. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     * @param params.legendOptions Provides options for setting a title to describe a fieldinstead of using the field name. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     * @param params.minValue A minimum value set by the user. Use this in conjunction with `maxValue` togenerate class breaks between lower and upper bounds. This will be the lower bound of the lowest class break.
     * @param params.maxValue A maximum value set by the user. Use this in conjunction with `minValue` togenerate class breaks between lower and upper bounds. This will be the upper bound of the highest class break.
     * @param params.defaultSymbolEnabled Enables the `defaultSymbol` on the renderer and assigns it to featureswith no value and features that do not fall within the configured data range.
     * @param params.view The view instance in which the visualization will be rendered.A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) is required if `symbolType = "3d-volumetric"` or `3d-volumetric-uniform`.The relevant SceneView or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) is required when a `valueExpression` is specified.
     * @param params.symbolType The type of symbol to generate. This depends on the viewin which you are working and the desired visualization. This parameter does not need to be specified for layerswith a `mesh` geometry type. Possible values are described below.| Value | Description || ----- | ----------- || 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). || 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). || 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). A SceneView instance must be provided to the `view` parameter if this option is used. |
     * @param params.colorMixMode **This option only applies to generating renderers for mesh SceneLayers**.Specifies how the symbol's color is applied to the geometry color/texture. See the documentation in[FillSymbol3DLayer.material](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material) for more context.See the table below for possible values.Value | Description------|------------tint | Applies the symbol `color` to the desaturated geometry/texture color.replace | Removes the geometry/texture color and applies the symbol `color`.multiply | Multiplies geometry/texture color value with the symbol `color` value. The result is a darker color. Multiplying with white keeps the geometry color the same.
     *
     */
    createClassBreaksRenderer(params: colorCreateClassBreaksRendererParams): IPromise<ClassBreaksRendererResult>;
    /**
     * Generates a [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html) that may be applied directly to thelayer used to call this method. Therenderer contains a continuous color visual variable that maps optimal colors based on the indicated basemapto specific stop values based on queried statistics from the indicated field or expression.In most cases you will provide a `layer`, `basemap`, `field`, and `theme` to generate this renderer.This is a scenario in whichthe statistics of the data aren't well known and the user doesn't know what colorsto use in the visualization. You can also use a `valueExpression` instead of a `field` to visualizefeatures based on a value returned from a script executed at runtime.The other options are provided for convenience for more involved custom visualization authoringapplications. For example, if you already generated statistics in another operation, youcan pass the statistics object to the `statistics` parameter to avoid making an extra call to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     *
     * @param params Input parameters for generating a continuous color visualization based on datareturned from a given field or expression. See the table below for details of each parameter.
     * @param params.layer The layer for which the visualizationis generated.
     * @param params.field The name of the field whose data will be queried for statistics and used forthe basis of the data-driven visualization.  This property is ignored if a `valueExpression` is used.
     * @param params.normalizationField The name of the field to normalize the values of the given`field`. Providing a normalization field helps minimize some visualization errors and standardizes the dataso all features are visualized with minimal bias due to area differences or count variation. This option iscommonly used when visualizing densities.
     * @param params.basemap The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     * @param params.theme Determines which values will be emphasized in the continuous ramp and the map.Possible values are listed below.| Value | Description | Example || ----- | ----------- | ------- || high-to-low | High values are emphasized with strong colors. | ![high-to-low](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-high-to-low.png) || above-and-below | Values centered around a given point (e.g. the average) are visualized with weak colors while other values are emphasized with strong colors. | ![above-and-below](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-above-and-below.png) || centered-on | Values centered around a given point (e.g. the average) are emphasized with strong colors while other values are visualized with weak colors. | ![centered-on](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-centered-on.png) || extremes | High and low values are emphasized with strong colors. All others are visualized with weak colors. | ![extremes](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-extremes.png) |
     * @param params.colorScheme In authoring apps,the user may select a pre-defined color scheme. Pass the scheme object to this property to avoid getting onebased on a `theme` and the `basemap`.
     * @param params.valueExpression An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     * @param params.valueExpressionTitle Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     * @param params.sqlExpression A SQL expression evaluating to a number.
     * @param params.sqlWhere A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     * @param params.outlineOptimizationEnabled For polygon layers only. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     * @param params.legendOptions Provides options for setting a title to a field when an expression is providedinstead of a field name. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     * @param params.statistics A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.If statistics for the field have already been generated, then pass the object here to avoid making a second statisticsquery to the server.
     * @param params.minValue A custom minimum value set by the user. Use this in conjunction with `maxValue` togenerate statistics between lower and upper bounds. This will be the lowest stop in the returned color visual variable.
     * @param params.maxValue A custom maximum value set by the user. Use this in conjunction with `minValue` togenerate statistics between lower and upper bounds. This will be the uppermost stop in the returned color visual variable.
     * @param params.defaultSymbolEnabled Enables the `defaultSymbol` on the renderer and assigns it to featureswith no value and features that do not fall within the configured data range.
     * @param params.view The view instance in which the visualization will be rendered.A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) is required if `symbolType = "3d-volumetric"` or `3d-volumetric-uniform`.The relevant SceneView or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) is required when a `valueExpression` is specified.
     * @param params.symbolType The type of symbol to generate. This depends on the viewin which you are working and the desired visualization. This parameter does not need to be specified for layerswith a `mesh` geometry type. Possible values are described below.| Value | Description || ----- | ----------- || 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). || 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). || 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). A SceneView instance must be provided to the `view` parameter if this option is used. |
     * @param params.colorMixMode **This option only applies to generating renderers for mesh SceneLayers**.Specifies how the symbol's color is applied to the geometry color/texture. See the documentation in[FillSymbol3DLayer.material](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material) for more context.See the table below for possible values.Value | Description------|------------tint | Applies the symbol `color` to the desaturated geometry/texture color.replace | Removes the geometry/texture color and applies the symbol `color`.multiply | Multiplies geometry/texture color value with the symbol `color` value. The result is a darker color. Multiplying with white keeps the geometry color the same.
     *
     */
    createContinuousRenderer(params: colorCreateContinuousRendererParams): IPromise<ContinuousRendererResult>;
    /**
     * Generates a [PointCloudStretchRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html) with a color scheme best-suitedfor the given basemap based on statistics returned from a given field of a[PointCloudLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html). All that's required isa layer instance, field name, and basemap ID. You can optionally set the size and densityof the points to suit the needs of the desired visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createPCContinuousRenderer)
     *
     * @param params Input parameters for generating a renderer based on the given  field of the input layer. See the table below for details of each parameter.
     * @param params.layer The layer for which the visualization  is generated.
     * @param params.field The name of the field whose data will be queried for statistics and used forthe basis of the data-driven visualization. The only field names used for this renderer type are`elevation` and `intensity`.
     * @param params.basemap The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     * @param params.size The size of each point expressed as a percentage. This value will determine point sizesscaled based on the given `density` of points. When the value is `100%`, the sizeof each point is set so that it minimizes the number of gaps between neighboring points. Any value above `100%`will allow for points to overlap neighboring points scaled to the given value. Values below `100%` scale pointsizes smaller so there appear to be more gaps between points.
     * @param params.density The number of points per inch in the view.
     * @param params.colorScheme In authoring apps,the user may select a pre-defined color scheme. Pass the scheme object to this property to avoid getting onebased on the `basemap`.
     * @param params.statistics A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.If statistics for the field have already been generated, then pass the stats object here to avoid making a second statisticsquery to the server.
     *
     */
    createPCContinuousRenderer(params: colorCreatePCContinuousRendererParams): IPromise<PCContinuousRendererResult>;
    /**
     * Generates a [PointCloudRGBRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRGBRenderer.html) based on the `RGB` field of a given[PointCloudLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html). This method simplifies theexperience of creating a [PointCloudRGBRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRGBRenderer.html) manually. All that's required isa layer instance. You can optionally set the size and densityof the points to suit the needs of the desired visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createPCTrueColorRenderer)
     *
     * @param params Input parameters for generating a true color visualization based on the `RGB`  field of the input layer. See the table below for details of each parameter.
     * @param params.layer The layer for which the visualization  is generated.
     * @param params.size The size of each point expressed as a percentage. This value will determine point sizesscaled based on the given `density` of points. When the value is `100%`, the sizeof each point is set so that it minimizes the number of gaps between neighboring points. Any value above `100%`will allow for points to overlap neighboring points scaled to the given value. Values below `100%` scale pointsizes smaller so there appear to be more gaps between points.
     * @param params.density The number of points per inch in the view.
     *
     */
    createPCTrueColorRenderer(params: colorCreatePCTrueColorRendererParams): IPromise<PCTrueColorRendererResult>;
    /**
     * This method generates a color visual variablewith default stops that are optimally chosen based on the statisticsqueried for the indicated field or expression and colors based on the input basemap.There are two different ways this method may be called. The most common case is byproviding a `layer`, `basemap`, `field`, and `theme`. This is the scenario wherethe statistics of the data aren't well known and the user doesn't know what colorsto use. You can optionally use a `valueExpression` instead of a field to visualizefeatures based on a numeric value returned from a script executed at runtime.The other options are provided for convenience for more involved custom visualization authoringapplications. For example, if you already generated statistics in another operation, youcan pass the object in the `statistics` parameter to avoid making an extra call to the server.You can also provide a `colorScheme` if you don't want one picked for you. In this case the `basemap` and`theme` options would be ignored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createVisualVariable)
     *
     * @param params Input parameters for generating a color visual variable based on datareturned from a given field or expression. See the table below for details of each parameter.
     * @param params.layer The layer for which the visual variableis generated.
     * @param params.field The name of the field whose data will be queried for statistics and used forthe basis of the data-driven visualization.  This property is ignored if a `valueExpression` is used.
     * @param params.normalizationField The name of the field to normalize the values of the given`field`. Providing a normalization field helps minimize some visualization errors and standardizes the dataso all features are visualized with minimal bias due to area differences or count variation. This option iscommonly used when visualizing densities.
     * @param params.basemap The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     * @param params.theme Determines which values will be emphasized in the continuous ramp and the map.Possible values are listed below.| Value | Description | Example || ----- | ----------- | ------- || high-to-low | High values are emphasized with strong colors. | ![high-to-low](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-high-to-low.png) || above-and-below | Values centered around a given point (e.g. the average) are visualized with weak colors while other values are emphasized with strong colors. | ![above-and-below](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-above-and-below.png) || centered-on | Values centered around a given point (e.g. the average) are emphasized with strong colors while other values are visualized with weak colors. | ![centered-on](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-centered-on.png) || extremes | High and low values are emphasized with strong colors. All others are visualized with weak colors. | ![extremes](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-extremes.png) |
     * @param params.colorScheme In authoring apps,the user may select a pre-defined color scheme. Pass the scheme object to this property to avoid getting onebased on a `theme` and the `basemap`.
     * @param params.valueExpression An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     * @param params.valueExpressionTitle Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     * @param params.sqlExpression A SQL expression evaluating to a number.
     * @param params.sqlWhere A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     * @param params.legendOptions Provides options for setting a title to a field when an expression is providedinstead of a field name. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     * @param params.statistics A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.If statistics for the field have already been generated, then pass the object here to avoid making a second statisticsquery to the server.
     * @param params.minValue A custom minimum value set by the user. Use this in conjunction with `maxValue` togenerate statistics between lower and upper bounds. This will be the lowest stop in the returned color visual variable.
     * @param params.maxValue A custom maximum value set by the user. Use this in conjunction with `minValue` togenerate statistics between lower and upper bounds. This will be the uppermost stop in the returned color visual variable.
     * @param params.view When generating 3D symbols (except for layers with a `mesh` geometry type),a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) instanceis required. The relevant SceneView or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) is required when a `valueExpression` is specified.
     * @param params.worldScale Indicates if the size units of the symbols will be in meters. This should be `true`when generating visualizations with 3D volumetric symbology, except for layerswith a `mesh` geometry type. A `view` must be provided if this property is set to `true`.
     *
     */
    createVisualVariable(params: colorCreateVisualVariableParams): IPromise<VisualVariableResult>;
  }

  export const color: color;

  /**
   * The result object of the [createAgeRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createAgeRenderer) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#AgeRendererResult)
   */
  export interface AgeRendererResult extends Object {
    /**
     * The renderer object configured to bestmatch the given basemap and the spread of the data. Set this on a layer's `renderer` property toupdate its visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#AgeRendererResult)
     */
    renderer: ClassBreaksRenderer;
    /**
     * A color visualvariable configured based on the statistics of the data and the given basemap and scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#AgeRendererResult)
     */
    visualVariable: ColorVariable;
    /**
     * The time unit used to represent age in the output `renderer`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#AgeRendererResult)
     */
    unit: string;
    /**
     * The color schemeused by the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#AgeRendererResult)
     */
    colorScheme: ColorScheme;
    /**
     * Indicates whether default values are used in the absence of sufficientdata and/or statistics from the layer. Default values are typically used when all features have the same fieldvalue or no value at all.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#AgeRendererResult)
     */
    defaultValuesUsed: boolean;
    /**
     * Basic statistics returned from a query to the service for data from the given field name or expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#AgeRendererResult)
     */
    statistics: SummaryStatisticsResult;
    /**
     * The ID of the basemap used to determine the optimal fill color of the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#AgeRendererResult)
     */
    basemapId: string;
  }

  /**
   * The result object of the [createClassBreaksRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#ClassBreaksRendererResult)
   */
  export interface ClassBreaksRendererResult extends Object {
    /**
     * The renderer object configured to bestmatch the given basemap and the spread of the data. Set this on a layer's `renderer` property toupdate its visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#ClassBreaksRendererResult)
     */
    renderer: ClassBreaksRenderer;
    /**
     * This objectdescribes class breaks generated from data in a layer for a given field with a specified classification method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#ClassBreaksRendererResult)
     */
    classBreaksResult: ClassBreaksResult;
    /**
     * The color schemeused for the class breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#ClassBreaksRendererResult)
     */
    colorScheme: ColorScheme;
    /**
     * Indicates whether default values are used in the absence of sufficientdata and/or statistics from the layer. Default values are typically used when all features have the same fieldvalue or no value at all.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#ClassBreaksRendererResult)
     */
    defaultValuesUsed: boolean;
    /**
     * The ID of the basemap used to determine the optimal fill color of the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#ClassBreaksRendererResult)
     */
    basemapId: string;
  }

  export interface colorCreateAgeRendererParams extends Object {
    /**
     * The layer  for which the visualization is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createAgeRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer;
    /**
     * The view instance in which the visualization will be rendered.
     *
     * [Read more...](global.html)
     */
    view: View;
    /**
     * The name of the field, or a date value representing the start time in the  age calculation. If a date value is specified, then the `endTime` parameter must reference a Date field in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createAgeRenderer)
     */
    startTime: Date | string | number;
    /**
     * The name of the field, or a date value representing the end time in the  age calculation. If a date value is specified, then the `startTime` parameter must reference a Date field in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createAgeRenderer)
     */
    endTime: Date | string | number;
    /**
     * The time unit used to calculate the difference between `endTime` and `startTime`. If a unit  is not specified, then a suggested unit is determined based on the spread and distribution of the data.  **Possible Values:** years | months | days | hours | minutes | seconds
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createAgeRenderer)
     */
    unit?: string;
    /**
     * The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of  the Esri basemap that will be paired with the output visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createAgeRenderer)
     *
     * @default gray
     */
    basemap?: string | Basemap;
    /**
     * Determines which values will be emphasized in the continuous ramp and the map.  Possible values are listed below.  | Value | Description | Example |  | ----- | ----------- | ------- |  | high-to-low | High values are emphasized with strong colors. | ![high-to-low](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-high-to-low.png) |  | above-and-below | Values centered around a given point (e.g. the average) are visualized with weak colors while other values are emphasized with strong colors. | ![above-and-below](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-above-and-below.png) |  | centered-on | Values centered around a given point (e.g. the average) are emphasized with strong colors while other values are visualized with weak colors. | ![centered-on](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-centered-on.png) |  | extremes | High and low values are emphasized with strong colors. All others are visualized with weak colors. | ![extremes](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-extremes.png) |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createAgeRenderer)
     */
    theme?: string;
    /**
     * For polygon layers only. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createAgeRenderer)
     *
     * @default false
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * Provides options for modifying [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) properties describing  the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createAgeRenderer)
     */
    legendOptions?: colorCreateAgeRendererParamsLegendOptions;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.  The `createAgeRenderer()` method generates an Arcade expression and executes a statistics query against the layer for the result of the expression.  If statistics for the expression have already been generated, then pass the object here to avoid making a second statistics  query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createAgeRenderer)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * In authoring apps,  the user may select a pre-defined color scheme. Pass the scheme object to this property to avoid getting one  based on a `theme` and the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createAgeRenderer)
     */
    colorScheme?: ColorScheme;
    /**
     * The type of symbol to generate. This depends on the view  in which you are working and the desired visualization. This parameter does not need to be specified for layers  with a `mesh` geometry type. Possible values are described below.  | Value | Description |  | ----- | ----------- |  | 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). |  | 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). |  | 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). A SceneView instance must be provided to the `view` parameter if this option is used. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createAgeRenderer)
     *
     * @default 2d
     */
    symbolType?: string;
    /**
     * Enables the `defaultSymbol` on the renderer and assigns it to features  with no value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createAgeRenderer)
     *
     * @default true
     */
    defaultSymbolEnabled?: boolean;
    /**
     * **This option only applies to generating renderers for mesh SceneLayers**.  Specifies how the symbol's color is applied to the geometry color/texture. See the documentation in  [FillSymbol3DLayer.material](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material) for more context.  See the table below for possible values.  Value | Description  ------|------------  tint | Applies the symbol `color` to the desaturated geometry/texture color.  replace | Removes the geometry/texture color and applies the symbol `color`.  multiply | Multiplies geometry/texture color value with the symbol `color` value. The result is a darker color. Multiplying with white keeps the geometry color the same.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createAgeRenderer)
     *
     * @default replace
     */
    colorMixMode?: string;
  }

  export interface colorCreateAgeRendererParamsLegendOptions extends Object {
    /**
     * The title used to represent the age color ramp in the  [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createAgeRenderer)
     */
    title?: string;
    /**
     * Indicates whether to include the age renderer in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createAgeRenderer)
     */
    showLegend?: boolean;
  }

  export interface colorCreateClassBreaksRendererParams extends Object {
    /**
     * The layer for which the visualizationis generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer;
    /**
     * The name of the field whose data will be queried for statistics and classified.  This property is ignored if a `valueExpression` is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     */
    field?: string;
    /**
     * The name of the field to normalize the values of the given`field`. Providing a normalization field helps minimize some visualization errors and standardizes the dataso all features are visualized with minimal bias due to area differences or count variation. This option iscommonly used when visualizing densities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     */
    normalizationField?: string;
    /**
     * Indicates how the data is normalized.The data value obtained from the `field`is normalized in one of the following ways before it is compared with the class breaks. See thetable below for a list of possible values.Possible Value | Description---------------|------------field | Divides the `field` value by the value of `normalizationField`. This value is set by default if the `normalizationField` is provided.log | Computes the base 10 logarithm of the data value. This can be a useful approach for some data distributions because it reduces the influence of very large data values.percent-of-total | Divides the data value by the sum of all data values then multiplies by 100. Use `normalizationTotal` to define the total value by which to normalize. This value is set by default if the `normalizationTotal` is provided.With the exception of `log` normalization, data normalization creates a ratio by dividing two values.When comparing attribute values between features, normalization minimizes the effect of varyingmap areas and the number of observations. For example, dividing the 18 to 30 year old population by thearea of a polygon feature yields a density value that can be compared evenly with other features,regardless of their size.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     */
    normalizationType?: string;
    /**
     * When `normalizationType` is `percent-of-total`, this property contains the total of all data values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     */
    normalizationTotal?: number;
    /**
     * The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     *
     * @default gray
     */
    basemap?: string | Basemap;
    /**
     * The classification method used for generating breaks.See the table below for a list of possible values.Possible Value | Description---------------|------------equal-interval | Divides the range of attribute values into equal-sized subranges. For example, if you specify three classes for a field whose values range from 0 to 300, this method will create three classes with ranges of 0–100, 101–200, and 201–300. Equal interval is best applied to familiar data ranges, such as percentages and temperature. This method emphasizes the amount of an attribute value relative to other values. For example, it could show if a store is part of the group of stores that make up the top one-third of all sales.natural-breaks | Groups similar values that maximize the differences between classes. Features are divided into classes whose boundaries are set where there are relatively big differences in the data values. Natural breaks are data-specific classifications and not useful for comparing multiple maps built from different underlying information.quantile | Assigns the same number of data values to each class. This is well suited to linearly distributed data. Because features are grouped in equal numbers in each class, the resulting map can often be misleading. Similar features can potentially be placed in adjacent classes, or features with widely different values can be put in the same class. You can minimize this distortion by increasing the number of classes.standard-deviation | Creates class breaks with equal value ranges that are a proportion of the standard deviation. This is usually done at intervals of one, one-half, one-third, or one-fourth standard deviations from the mean.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     *
     * @default equal-interval
     */
    classificationMethod?: string;
    /**
     * If a `standard-deviation` classification method is used, then this indicates the interval by which to generate class breaks.**Possible Values:** 1 | 0.5 | 0.33 | 0.25
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     *
     * @default 1
     */
    standardDeviationInterval?: number;
    /**
     * The number of class breaks to generate. This is ignored if a `standard-deviation` classification method is specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     *
     * @default 5
     */
    numClasses?: number;
    /**
     * In authoring apps,the user may select a pre-defined color scheme. Pass the scheme object to this property to avoid getting onebased on the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     */
    colorScheme?: ColorScheme;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     */
    valueExpressionTitle?: string;
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     */
    sqlWhere?: string;
    /**
     * For polygon layers only. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     *
     * @default false
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * Provides options for setting a title to describe a fieldinstead of using the field name. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     */
    legendOptions?: colorCreateClassBreaksRendererParamsLegendOptions;
    /**
     * A minimum value set by the user. Use this in conjunction with `maxValue` togenerate class breaks between lower and upper bounds. This will be the lower bound of the lowest class break.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     */
    minValue?: number;
    /**
     * A maximum value set by the user. Use this in conjunction with `minValue` togenerate class breaks between lower and upper bounds. This will be the upper bound of the highest class break.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     */
    maxValue?: number;
    /**
     * Enables the `defaultSymbol` on the renderer and assigns it to featureswith no value and features that do not fall within the configured data range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     *
     * @default true
     */
    defaultSymbolEnabled?: boolean;
    /**
     * The view instance in which the visualization will be rendered.A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) is required if `symbolType = "3d-volumetric"` or `3d-volumetric-uniform`.The relevant SceneView or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) is required when a `valueExpression` is specified.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * The type of symbol to generate. This depends on the viewin which you are working and the desired visualization. This parameter does not need to be specified for layerswith a `mesh` geometry type. Possible values are described below.| Value | Description || ----- | ----------- || 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). || 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). || 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). A SceneView instance must be provided to the `view` parameter if this option is used. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     *
     * @default 2d
     */
    symbolType?: string;
    /**
     * **This option only applies to generating renderers for mesh SceneLayers**.Specifies how the symbol's color is applied to the geometry color/texture. See the documentation in[FillSymbol3DLayer.material](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material) for more context.See the table below for possible values.Value | Description------|------------tint | Applies the symbol `color` to the desaturated geometry/texture color.replace | Removes the geometry/texture color and applies the symbol `color`.multiply | Multiplies geometry/texture color value with the symbol `color` value. The result is a darker color. Multiplying with white keeps the geometry color the same.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     *
     * @default replace
     */
    colorMixMode?: string;
  }

  export interface colorCreateClassBreaksRendererParamsLegendOptions extends Object {
    /**
     * The title used to represent the given field or expression in the[Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)
     */
    title?: string;
  }

  export interface colorCreateContinuousRendererParams extends Object {
    /**
     * The layer for which the visualizationis generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer;
    /**
     * The name of the field whose data will be queried for statistics and used forthe basis of the data-driven visualization.  This property is ignored if a `valueExpression` is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     */
    field?: string;
    /**
     * The name of the field to normalize the values of the given`field`. Providing a normalization field helps minimize some visualization errors and standardizes the dataso all features are visualized with minimal bias due to area differences or count variation. This option iscommonly used when visualizing densities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     */
    normalizationField?: string;
    /**
     * The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     *
     * @default gray
     */
    basemap?: string | Basemap;
    /**
     * Determines which values will be emphasized in the continuous ramp and the map.Possible values are listed below.| Value | Description | Example || ----- | ----------- | ------- || high-to-low | High values are emphasized with strong colors. | ![high-to-low](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-high-to-low.png) || above-and-below | Values centered around a given point (e.g. the average) are visualized with weak colors while other values are emphasized with strong colors. | ![above-and-below](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-above-and-below.png) || centered-on | Values centered around a given point (e.g. the average) are emphasized with strong colors while other values are visualized with weak colors. | ![centered-on](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-centered-on.png) || extremes | High and low values are emphasized with strong colors. All others are visualized with weak colors. | ![extremes](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-extremes.png) |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     */
    theme?: string;
    /**
     * In authoring apps,the user may select a pre-defined color scheme. Pass the scheme object to this property to avoid getting onebased on a `theme` and the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     */
    colorScheme?: ColorScheme;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     */
    valueExpressionTitle?: string;
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     */
    sqlWhere?: string;
    /**
     * For polygon layers only. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     *
     * @default false
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * Provides options for setting a title to a field when an expression is providedinstead of a field name. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     */
    legendOptions?: colorCreateContinuousRendererParamsLegendOptions;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.If statistics for the field have already been generated, then pass the object here to avoid making a second statisticsquery to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * A custom minimum value set by the user. Use this in conjunction with `maxValue` togenerate statistics between lower and upper bounds. This will be the lowest stop in the returned color visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     */
    minValue?: number;
    /**
     * A custom maximum value set by the user. Use this in conjunction with `minValue` togenerate statistics between lower and upper bounds. This will be the uppermost stop in the returned color visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     */
    maxValue?: number;
    /**
     * Enables the `defaultSymbol` on the renderer and assigns it to featureswith no value and features that do not fall within the configured data range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     *
     * @default true
     */
    defaultSymbolEnabled?: boolean;
    /**
     * The view instance in which the visualization will be rendered.A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) is required if `symbolType = "3d-volumetric"` or `3d-volumetric-uniform`.The relevant SceneView or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) is required when a `valueExpression` is specified.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * The type of symbol to generate. This depends on the viewin which you are working and the desired visualization. This parameter does not need to be specified for layerswith a `mesh` geometry type. Possible values are described below.| Value | Description || ----- | ----------- || 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). || 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). || 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). A SceneView instance must be provided to the `view` parameter if this option is used. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     *
     * @default 2d
     */
    symbolType?: string;
    /**
     * **This option only applies to generating renderers for mesh SceneLayers**.Specifies how the symbol's color is applied to the geometry color/texture. See the documentation in[FillSymbol3DLayer.material](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material) for more context.See the table below for possible values.Value | Description------|------------tint | Applies the symbol `color` to the desaturated geometry/texture color.replace | Removes the geometry/texture color and applies the symbol `color`.multiply | Multiplies geometry/texture color value with the symbol `color` value. The result is a darker color. Multiplying with white keeps the geometry color the same.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     *
     * @default replace
     */
    colorMixMode?: string;
  }

  export interface colorCreateContinuousRendererParamsLegendOptions extends Object {
    /**
     * The title used to represent the given field or expression in the[Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     */
    title?: string;
    /**
     * Indicates whether to describe the renderer in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)
     */
    showLegend?: boolean;
  }

  export interface colorCreatePCContinuousRendererParams extends Object {
    /**
     * The layer for which the visualization  is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createPCContinuousRenderer)
     */
    layer: PointCloudLayer;
    /**
     * The name of the field whose data will be queried for statistics and used forthe basis of the data-driven visualization. The only field names used for this renderer type are`elevation` and `intensity`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createPCContinuousRenderer)
     */
    field: string;
    /**
     * The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createPCContinuousRenderer)
     *
     * @default gray
     */
    basemap?: string | Basemap;
    /**
     * The size of each point expressed as a percentage. This value will determine point sizesscaled based on the given `density` of points. When the value is `100%`, the sizeof each point is set so that it minimizes the number of gaps between neighboring points. Any value above `100%`will allow for points to overlap neighboring points scaled to the given value. Values below `100%` scale pointsizes smaller so there appear to be more gaps between points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createPCContinuousRenderer)
     *
     * @default 100%
     */
    size?: string;
    /**
     * The number of points per inch in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createPCContinuousRenderer)
     *
     * @default 25
     */
    density?: number;
    /**
     * In authoring apps,the user may select a pre-defined color scheme. Pass the scheme object to this property to avoid getting onebased on the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createPCContinuousRenderer)
     */
    colorScheme?: ColorScheme;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.If statistics for the field have already been generated, then pass the stats object here to avoid making a second statisticsquery to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createPCContinuousRenderer)
     */
    statistics?: SummaryStatisticsResult;
  }

  export interface colorCreatePCTrueColorRendererParams extends Object {
    /**
     * The layer for which the visualization  is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createPCTrueColorRenderer)
     */
    layer: PointCloudLayer;
    /**
     * The size of each point expressed as a percentage. This value will determine point sizesscaled based on the given `density` of points. When the value is `100%`, the sizeof each point is set so that it minimizes the number of gaps between neighboring points. Any value above `100%`will allow for points to overlap neighboring points scaled to the given value. Values below `100%` scale pointsizes smaller so there appear to be more gaps between points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createPCTrueColorRenderer)
     *
     * @default 100%
     */
    size?: string;
    /**
     * The number of points per inch in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createPCTrueColorRenderer)
     *
     * @default 25
     */
    density?: number;
  }

  export interface colorCreateVisualVariableParams extends Object {
    /**
     * The layer for which the visual variableis generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createVisualVariable)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer;
    /**
     * The name of the field whose data will be queried for statistics and used forthe basis of the data-driven visualization.  This property is ignored if a `valueExpression` is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createVisualVariable)
     */
    field?: string;
    /**
     * The name of the field to normalize the values of the given`field`. Providing a normalization field helps minimize some visualization errors and standardizes the dataso all features are visualized with minimal bias due to area differences or count variation. This option iscommonly used when visualizing densities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createVisualVariable)
     */
    normalizationField?: string;
    /**
     * The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createVisualVariable)
     *
     * @default gray
     */
    basemap?: string | Basemap;
    /**
     * Determines which values will be emphasized in the continuous ramp and the map.Possible values are listed below.| Value | Description | Example || ----- | ----------- | ------- || high-to-low | High values are emphasized with strong colors. | ![high-to-low](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-high-to-low.png) || above-and-below | Values centered around a given point (e.g. the average) are visualized with weak colors while other values are emphasized with strong colors. | ![above-and-below](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-above-and-below.png) || centered-on | Values centered around a given point (e.g. the average) are emphasized with strong colors while other values are visualized with weak colors. | ![centered-on](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-centered-on.png) || extremes | High and low values are emphasized with strong colors. All others are visualized with weak colors. | ![extremes](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-extremes.png) |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createVisualVariable)
     */
    theme?: string;
    /**
     * In authoring apps,the user may select a pre-defined color scheme. Pass the scheme object to this property to avoid getting onebased on a `theme` and the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createVisualVariable)
     */
    colorScheme?: ColorScheme;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createVisualVariable)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createVisualVariable)
     */
    valueExpressionTitle?: string;
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createVisualVariable)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createVisualVariable)
     */
    sqlWhere?: string;
    /**
     * Provides options for setting a title to a field when an expression is providedinstead of a field name. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createVisualVariable)
     */
    legendOptions?: colorCreateVisualVariableParamsLegendOptions;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.If statistics for the field have already been generated, then pass the object here to avoid making a second statisticsquery to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createVisualVariable)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * A custom minimum value set by the user. Use this in conjunction with `maxValue` togenerate statistics between lower and upper bounds. This will be the lowest stop in the returned color visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createVisualVariable)
     */
    minValue?: number;
    /**
     * A custom maximum value set by the user. Use this in conjunction with `minValue` togenerate statistics between lower and upper bounds. This will be the uppermost stop in the returned color visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createVisualVariable)
     */
    maxValue?: number;
    /**
     * When generating 3D symbols (except for layers with a `mesh` geometry type),a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) instanceis required. The relevant SceneView or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) is required when a `valueExpression` is specified.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * Indicates if the size units of the symbols will be in meters. This should be `true`when generating visualizations with 3D volumetric symbology, except for layerswith a `mesh` geometry type. A `view` must be provided if this property is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createVisualVariable)
     */
    worldScale?: boolean;
  }

  export interface colorCreateVisualVariableParamsLegendOptions extends Object {
    /**
     * The title used to represent the given field or expression in the[Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createVisualVariable)
     */
    title?: string;
    /**
     * Indicates whether to describe the renderer in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createVisualVariable)
     */
    showLegend?: boolean;
  }

  /**
   * The result object of the [createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#ContinuousRendererResult)
   */
  export interface ContinuousRendererResult extends Object {
    /**
     * The renderer object configured to bestmatch the given basemap and the spread of the data. Set this on a layer's `renderer` property toupdate its visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#ContinuousRendererResult)
     */
    renderer: ClassBreaksRenderer;
    /**
     * A color visualvariable configured based on the statistics of the data and the given basemap and scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#ContinuousRendererResult)
     */
    visualVariable: ColorVariable;
    /**
     * The color schemeused by the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#ContinuousRendererResult)
     */
    colorScheme: ColorScheme;
    /**
     * Indicates whether default values are used in the absence of sufficientdata and/or statistics from the layer. Default values are typically used when all features have the same fieldvalue or no value at all.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#ContinuousRendererResult)
     */
    defaultValuesUsed: boolean;
    /**
     * Basic statistics returned from a query to the service for data from the given field name or expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#ContinuousRendererResult)
     */
    statistics: SummaryStatisticsResult;
    /**
     * The ID of the basemap used to determine the optimal fill color of the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#ContinuousRendererResult)
     */
    basemapId: string;
  }

  /**
   * The result object of the [createPCContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createPCContinuousRenderer) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#PCContinuousRendererResult)
   */
  export interface PCContinuousRendererResult extends Object {
    /**
     * The renderer object configured to bestmatch the given basemap and the spread of the data. Set this object on the input layer's `renderer` property toupdate its visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#PCContinuousRendererResult)
     */
    renderer: PointCloudStretchRenderer;
    /**
     * The color schemeused by the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#PCContinuousRendererResult)
     */
    colorScheme: ColorScheme;
    /**
     * Indicates whether default values are used in the absence of sufficientdata and/or statistics from the layer. Default values are typically used when all features have the same fieldvalue or no value at all.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#PCContinuousRendererResult)
     */
    defaultValuesUsed: boolean;
    /**
     * Basic statistics returned from a query to the service for data from the given field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#PCContinuousRendererResult)
     */
    statistics: SummaryStatisticsResult;
    /**
     * The ID of the basemap used to determine the optimal color scheme for the output renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#PCContinuousRendererResult)
     */
    basemapId: string;
  }

  /**
   * The result object of the [createPCTrueColorRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createPCTrueColorRenderer) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#PCTrueColorRendererResult)
   */
  export interface PCTrueColorRendererResult extends Object {
    /**
     * The renderer object configured torepresent the true color of each point in the point cloud. This gives the PointCloudLayer a realistic visualizationof how it looks in the real world. Set this object on the input layer's `renderer` property toupdate its visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#PCTrueColorRendererResult)
     */
    renderer: PointCloudRGBRenderer;
  }

  /**
   * The result object of the [createVisualVariable()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createVisualVariable) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#VisualVariableResult)
   */
  export interface VisualVariableResult extends Object {
    /**
     * A color visualvariable configured based on the statistics of the data and the given basemap and scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#VisualVariableResult)
     */
    visualVariable: ColorVariable;
    /**
     * The color schemeused by the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#VisualVariableResult)
     */
    colorScheme: ColorScheme;
    /**
     * Basic statistics returned from a query to the service for the given field or expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#VisualVariableResult)
     */
    statistics: SummaryStatisticsResult;
    /**
     * Indicates whether default values are used in the absence of sufficientdata and/or statistics from the layer. Default values are typically used when all features have the same fieldvalue or no value at all.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#VisualVariableResult)
     */
    defaultValuesUsed: boolean;
    /**
     * The ID of the basemap used to determine the optimal fill color of the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#VisualVariableResult)
     */
    basemapId: string;
    /**
     * Authoring information related to the creation of the visual variable. This includes information related to UI inputs from sliders and selected themes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#VisualVariableResult)
     */
    authoringInfo: AuthoringInfo;
  }

  interface dotDensity {
    /**
     * Generates a [DotDensityRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html) based on one or more complementary numeric fieldsand/or Arcade expressions. This method will determine an appropriate [dotValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#dotValue)for the data at the scale of the provided view.For example, suppose you have a layer of U.S. counties with fields containing the total sales ofvarious crops: wheat, soybeans, corn, cotton, and vegetables. If a feature has the following values for each field:Field Name | Count | Color-----------|-------|------Wheat | 140 | purpleSoybeans | 2000 | blueCorn | 0 | yellowCotton | 300 | greenVegetables | 120 | redThis method will generate a renderer that may determine the `dotValue` should be `20`. Thefeature with the data above will be rendered with a random placement of 6 purple dots, 100 blue dots,no yellow dots, 60 green dots, and 5 red dots.The suggested value is calculated basedon a sampling of features. So executing this method multiple times using the same parameters may yieldvaried results.Other options are provided for convenience for more involved custom visualization authoringapplications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-dotDensity.html#createRenderer)
     *
     * @param params Input parameters for generating a dot density visualization based on a set of complementary numeric field(s).  See the table below for details of each parameter.
     * @param params.layer The **polygon** layer  for which the visualization is generated.
     * @param params.view The MapView instance in which the visualization will be rendered.
     * @param params.attributes A set of complementary numeric fields/expressions used as the basis of the dot density visualization. For example,  if creating an election map, you would indicate the names of each field representing the candidate or political party where  total votes are stored.
     * @param params.basemap The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of  the Esri basemap that will be paired with the output visualization.
     * @param params.dotValueOptimizationEnabled Indicates whether to vary the value of each dot by the view's scale. This will set  the [referenceScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#referenceScale) of the output renderer.
     * @param params.dotBlendingEnabled Indicates whether to enable color blending of different colored dots rendered at the same pixel.  This is only visible in highly dense and highly diverse features.
     * @param params.outlineOptimizationEnabled Indicates whether the  polygon outline width should vary based on view scale. When false, no outline will be used in the output renderer.
     * @param params.legendOptions Provides options for modifying [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) properties describing  the visualization.
     * @param params.dotDensityScheme In authoring apps,  the user may select a pre-defined dot density scheme. Pass the scheme object to this property to avoid getting one based on the `basemap`.
     *
     */
    createRenderer(params: dotDensityCreateRendererParams): IPromise<RendererResult>;
  }

  export const dotDensity: dotDensity;

  export interface dotDensityCreateRendererParams extends Object {
    /**
     * The **polygon** layer  for which the visualization is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-dotDensity.html#createRenderer)
     */
    layer: FeatureLayer | GeoJSONLayer;
    /**
     * The MapView instance in which the visualization will be rendered.
     *
     * [Read more...](global.html)
     */
    view: MapView;
    /**
     * A set of complementary numeric fields/expressions used as the basis of the dot density visualization. For example,  if creating an election map, you would indicate the names of each field representing the candidate or political party where  total votes are stored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-dotDensity.html#createRenderer)
     */
    attributes: dotDensityCreateRendererParamsAttributes[];
    /**
     * The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of  the Esri basemap that will be paired with the output visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-dotDensity.html#createRenderer)
     *
     * @default gray
     */
    basemap?: string | Basemap;
    /**
     * Indicates whether to vary the value of each dot by the view's scale. This will set  the [referenceScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#referenceScale) of the output renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-dotDensity.html#createRenderer)
     *
     * @default true
     */
    dotValueOptimizationEnabled?: boolean;
    /**
     * Indicates whether to enable color blending of different colored dots rendered at the same pixel.  This is only visible in highly dense and highly diverse features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-dotDensity.html#createRenderer)
     *
     * @default true
     */
    dotBlendingEnabled?: boolean;
    /**
     * Indicates whether the  polygon outline width should vary based on view scale. When false, no outline will be used in the output renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-dotDensity.html#createRenderer)
     *
     * @default false
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * Provides options for modifying [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) properties describing  the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-dotDensity.html#createRenderer)
     */
    legendOptions?: dotDensityCreateRendererParamsLegendOptions;
    /**
     * In authoring apps,  the user may select a pre-defined dot density scheme. Pass the scheme object to this property to avoid getting one based on the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-dotDensity.html#createRenderer)
     */
    dotDensityScheme?: DotDensityScheme;
  }

  export interface dotDensityCreateRendererParamsAttributes extends Object {
    /**
     * The name of a numeric field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-dotDensity.html#createRenderer)
     */
    field?: string;
    /**
     * The label describing the field name (or category) in the legend. This is should be used  if the given field doesn't have an intuitive field name or alias. For example, for a field named `dem` representing the total vote count  for the Democratic party, you can set the label to `Democrat` to clarify the name of the category in the final visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-dotDensity.html#createRenderer)
     */
    label?: string;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-dotDensity.html#createRenderer)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-dotDensity.html#createRenderer)
     */
    valueExpressionTitle?: string;
  }

  export interface dotDensityCreateRendererParamsLegendOptions extends Object {
    /**
     * Indicates the unit represented by each dot in the legend. For example, in a population  density map, you might set the value of `people` to this param. The output renderer would display `1 dot = 300 people` in the Legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-dotDensity.html#createRenderer)
     */
    unit?: string;
  }

  /**
   * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-dotDensity.html#createRenderer) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-dotDensity.html#RendererResult)
   */
  export interface RendererResult extends Object {
    /**
     * The object representing  the dot density visualization. Set this on a layer's `renderer` property to update its visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-dotDensity.html#RendererResult)
     */
    renderer: DotDensityRenderer;
    /**
     * The dot density scheme used by the renderer based on the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-dotDensity.html#RendererResult)
     */
    dotDensityScheme: DotDensityScheme;
    /**
     * The ID of the basemap used to determine the optimal colors of the dots.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-dotDensity.html#RendererResult)
     */
    basemapId: string;
  }

  interface heatmap {
    /**
     * Generates a [HeatmapRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html) that may be applied directly to thelayer used to call this method. Therenderer represents points as a continuous surface using optimal colors for the indicated basemap.This method should be called when at least some points are visible in the input view's extent. If nopoints are visible in the view, then the response will not return a useful visualization.In most cases you will provide a `layer`, `basemap`, and optional `field` to generate this renderer.This is a scenario in whichthe statistics and the distribution of the data aren't well known and the user doesn't know what colorsto use in the visualization.The other options are provided for convenience for more involved custom visualization authoringapplications. For example, if you already generated statistics in another operation, youcan pass the statistics object to the `statistics` parameter to avoid making an extra call to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#createRenderer)
     *
     * @param params Input parameters for generating a heatmap visualization based on datareturned from a given field. See the table below for details of each parameter.
     * @param params.layer The point layer for which the visualization  is generated.
     * @param params.view The view instance in which the visualization will be rendered.
     * @param params.field The name of the field whose data will be queried for statistics and used for  the basis of the data-driven visualization. The value of the `field` is used as a multiplier in the heatmap, making  areas with high field values hotter than areas where the features have low field values.
     * @param params.basemap The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemap  that will be paired with the output visualization.
     * @param params.heatmapScheme In authoring apps,  the user may select a pre-defined heatmap scheme. Pass the scheme object to this property to avoid getting one  based on the `basemap`.
     * @param params.statistics A statistics object generated from the [heatmapStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-heatmapStatistics.html) function.  If statistics for the field have already been generated, then pass the object here to avoid making a second statistics  query to the server.
     * @param params.fadeToTransparent Indicates whether to fade the lower color stops to a transparent color to  create a fuzzy boundary on the edge of the heatmap. A value of `false` makes a discrete boundary on the lower color stop.
     * @param params.blurRadius The [blurRadius](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#blurRadius) in pixels that  determines the area of influence of each point. A higher blur radius indicates points have more influence on surrounding points.
     * @param params.minRatio The minimum [ratio](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-HeatmapColorStop.html#ratio) used in the  [HeatmapRenderer.colorStops](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#colorStops) of the output renderer.
     * @param params.maxRatio The maximum [ratio](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-HeatmapColorStop.html#ratio) used in the  [HeatmapRenderer.colorStops](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#colorStops) of the output renderer.
     *
     */
    createRenderer(params: heatmapCreateRendererParams): IPromise<HeatmapRendererResult>;
  }

  export const heatmap: heatmap;

  export interface heatmapCreateRendererParams extends Object {
    /**
     * The point layer for which the visualization  is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#createRenderer)
     */
    layer: FeatureLayer | CSVLayer | GeoJSONLayer;
    /**
     * The view instance in which the visualization will be rendered.
     *
     * [Read more...](global.html)
     */
    view: MapView;
    /**
     * The name of the field whose data will be queried for statistics and used for  the basis of the data-driven visualization. The value of the `field` is used as a multiplier in the heatmap, making  areas with high field values hotter than areas where the features have low field values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#createRenderer)
     */
    field?: string;
    /**
     * The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemap  that will be paired with the output visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#createRenderer)
     *
     * @default gray
     */
    basemap?: string | Basemap;
    /**
     * In authoring apps,  the user may select a pre-defined heatmap scheme. Pass the scheme object to this property to avoid getting one  based on the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#createRenderer)
     */
    heatmapScheme?: HeatmapScheme;
    /**
     * A statistics object generated from the [heatmapStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-heatmapStatistics.html) function.  If statistics for the field have already been generated, then pass the object here to avoid making a second statistics  query to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#createRenderer)
     */
    statistics?: HeatmapStatisticsResult;
    /**
     * Indicates whether to fade the lower color stops to a transparent color to  create a fuzzy boundary on the edge of the heatmap. A value of `false` makes a discrete boundary on the lower color stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#createRenderer)
     *
     * @default true
     */
    fadeToTransparent?: boolean;
    /**
     * The [blurRadius](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#blurRadius) in pixels that  determines the area of influence of each point. A higher blur radius indicates points have more influence on surrounding points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#createRenderer)
     *
     * @default 10
     */
    blurRadius?: number;
    /**
     * The minimum [ratio](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-HeatmapColorStop.html#ratio) used in the  [HeatmapRenderer.colorStops](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#colorStops) of the output renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#createRenderer)
     *
     * @default 0.01
     */
    minRatio?: number;
    /**
     * The maximum [ratio](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-HeatmapColorStop.html#ratio) used in the  [HeatmapRenderer.colorStops](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#colorStops) of the output renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#createRenderer)
     *
     * @default 1
     */
    maxRatio?: number;
  }

  /**
   * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#createRenderer) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#HeatmapRendererResult)
   */
  export interface HeatmapRendererResult extends Object {
    /**
     * The renderer object configured to best  match the given basemap and the spread of the data. Set this on a layer's `renderer` property to  update its visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#HeatmapRendererResult)
     */
    renderer: HeatmapRenderer;
    /**
     * The color scheme  used by the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#HeatmapRendererResult)
     */
    scheme: HeatmapScheme;
    /**
     * Indicates whether default values are used in the absence of sufficient  data and/or statistics from the layer. Default values are typically used when all features have the same field  value or no value at all.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#HeatmapRendererResult)
     */
    defaultValuesUsed: boolean;
    /**
     * Basic statistics returned from a query to the service for data from the given field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#HeatmapRendererResult)
     */
    statistics: HeatmapStatisticsResult;
    /**
     * The ID of the basemap used to determine the optimal color stops of the heatmap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#HeatmapRendererResult)
     */
    basemapId: string;
  }

  interface location {
    /**
     * Generates a [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html) that may be applied directly to asupported [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html). Therenderer contains a single symbol with a color optimally chosen based on the indicated basemap.In most cases you will provide a `layer` and `basemap` to generate this renderer. If working ina 3D [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html), then the `view` and `symbolType` options should be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-location.html#createRenderer)
     *
     * @param params Input parameters for generating a location-based visualization.See the table below for details of each parameter.
     * @param params.layer The layer forwhich the visualization is generated.
     * @param params.basemap The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     * @param params.locationScheme In authoring apps,the user may select a pre-defined location scheme. Pass the scheme object to this property to avoid getting onebased on the `basemap`.
     * @param params.view The SceneView instance in which the visualization will be rendered.This parameter is required if `symbolType = "3d-volumetric"`, except for layers with a `mesh` geometryType.
     * @param params.outlineOptimizationEnabled For polygon layers only. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     * @param params.symbolType The type of symbol to generate. This depends on the viewin which you are working and the desired visualization. This parameter does not need to be specified for layerswith a `mesh` geometry type. Possible values are described below.| Value | Description || ----- | ----------- || 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). || 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). || 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). A SceneView instance must be provided to the `view` parameter if this option is used. |
     * @param params.colorMixMode **This option only applies to generating renderers for mesh SceneLayers**.Specifies how the symbol's color is applied to the geometry color/texture. See the documentation in[FillSymbol3DLayer.material](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material) for more context.See the table below for possible values.Value | Description------|------------tint | Applies the symbol `color` to the desaturated geometry/texture color.replace | Removes the geometry/texture color and applies the symbol `color`.multiply | Multiplies geometry/texture color value with the symbol `color` value. The result is a darker color. Multiplying with white keeps the geometry color the same.
     *
     */
    createRenderer(params: locationCreateRendererParams): IPromise<locationRendererResult>;
  }

  export const location: location;

  export interface locationCreateRendererParams extends Object {
    /**
     * The layer forwhich the visualization is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-location.html#createRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer;
    /**
     * The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-location.html#createRenderer)
     *
     * @default gray
     */
    basemap?: string | Basemap;
    /**
     * In authoring apps,the user may select a pre-defined location scheme. Pass the scheme object to this property to avoid getting onebased on the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-location.html#createRenderer)
     */
    locationScheme?: LocationScheme;
    /**
     * The SceneView instance in which the visualization will be rendered.This parameter is required if `symbolType = "3d-volumetric"`, except for layers with a `mesh` geometryType.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
    /**
     * For polygon layers only. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-location.html#createRenderer)
     *
     * @default false
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * The type of symbol to generate. This depends on the viewin which you are working and the desired visualization. This parameter does not need to be specified for layerswith a `mesh` geometry type. Possible values are described below.| Value | Description || ----- | ----------- || 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). || 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). || 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). A SceneView instance must be provided to the `view` parameter if this option is used. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-location.html#createRenderer)
     *
     * @default 2d
     */
    symbolType?: string;
    /**
     * **This option only applies to generating renderers for mesh SceneLayers**.Specifies how the symbol's color is applied to the geometry color/texture. See the documentation in[FillSymbol3DLayer.material](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material) for more context.See the table below for possible values.Value | Description------|------------tint | Applies the symbol `color` to the desaturated geometry/texture color.replace | Removes the geometry/texture color and applies the symbol `color`.multiply | Multiplies geometry/texture color value with the symbol `color` value. The result is a darker color. Multiplying with white keeps the geometry color the same.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-location.html#createRenderer)
     *
     * @default replace
     */
    colorMixMode?: string;
  }

  /**
   * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-location.html#createRenderer) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-location.html#RendererResult)
   */
  export interface locationRendererResult extends Object {
    /**
     * A simple renderer configured with a single color bestsuited to match the given basemap. Set this to a layer's `renderer` property toupdate its visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-location.html#RendererResult)
     */
    renderer: SimpleRenderer;
    /**
     * The location scheme  used by the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-location.html#RendererResult)
     */
    locationScheme: LocationScheme;
    /**
     * The ID of the basemap used to determine the optimal fill color of the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-location.html#RendererResult)
     */
    basemapId: string;
  }

  interface opacity {
    /**
     * This method generates an opacity visual variablewith default alpha values optimally mapped to data values based on the statisticsqueried for the indicated field or expression.There are several ways this method may be called. The most common case is byproviding a `layer` and a `field`. This is the scenario wherethe statistics of the data aren't well known and the user doesn't know the whichalpha values to map to data values. You can optionally use a `valueExpression` instead of a field to visualizefeatures based on a numeric value returned from a script executed at runtime.The other options are provided for convenience for more involved custom visualization authoringapplications. For example, if you already generated statistics in another operation, youcan pass the stats in the `statistics` parameter to avoid making an extra call to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#createVisualVariable)
     *
     * @param params Input parameters for generating an opacity visual variable based on datareturned from a given field or expression. See the table below for details of each parameter.
     * @param params.layer The layer for which the visual variable  is generated.
     * @param params.field The name of the field whose data will be queried for statistics and used for  the basis of the data-driven visualization.  This property is ignored if a `valueExpression` is used.
     * @param params.normalizationField The name of the field to normalize the values of the given  `field`. Providing a normalization field helps minimize some visualization errors and standardizes the data  so all features are visualized with minimal bias due to area differences or count variation. This option is  commonly used when visualizing densities.
     * @param params.valueExpression An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.  This expression can reference field values using the `$feature` global variable. This property overrides the  `field` property and therefore is used instead of an input `field` value.
     * @param params.valueExpressionTitle Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     * @param params.sqlExpression A SQL expression evaluating to a number.
     * @param params.sqlWhere A SQL where clause used to filter features for the statistics query. For example,  this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominance  visualization.
     * @param params.legendOptions Provides options for setting a title to a field when an expression is provided  instead of a field name. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     * @param params.statistics A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.  If statistics for the field have already been generated, then pass the object here to avoid making a second statistics  query to the server.
     * @param params.minValue A custom minimum value set by the user. Use this in conjunction with `maxValue` togenerate statistics between lower and upper bounds. This will be the lowest stop in the returned visual variable.
     * @param params.maxValue A custom maximum value set by the user. Use this in conjunction with `minValue` togenerate statistics between lower and upper bounds. This will be the uppermost stop in the returned visual variable.
     * @param params.view A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)instance is required when a `valueExpression` is specified.
     *
     */
    createVisualVariable(params: opacityCreateVisualVariableParams): IPromise<opacityVisualVariableResult>;
  }

  export const opacity: opacity;

  export interface opacityCreateVisualVariableParams extends Object {
    /**
     * The layer for which the visual variable  is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#createVisualVariable)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer;
    /**
     * The name of the field whose data will be queried for statistics and used for  the basis of the data-driven visualization.  This property is ignored if a `valueExpression` is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#createVisualVariable)
     */
    field?: string;
    /**
     * The name of the field to normalize the values of the given  `field`. Providing a normalization field helps minimize some visualization errors and standardizes the data  so all features are visualized with minimal bias due to area differences or count variation. This option is  commonly used when visualizing densities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#createVisualVariable)
     */
    normalizationField?: string;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.  This expression can reference field values using the `$feature` global variable. This property overrides the  `field` property and therefore is used instead of an input `field` value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#createVisualVariable)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#createVisualVariable)
     */
    valueExpressionTitle?: string;
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#createVisualVariable)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query. For example,  this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominance  visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#createVisualVariable)
     */
    sqlWhere?: string;
    /**
     * Provides options for setting a title to a field when an expression is provided  instead of a field name. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#createVisualVariable)
     */
    legendOptions?: opacityCreateVisualVariableParamsLegendOptions;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.  If statistics for the field have already been generated, then pass the object here to avoid making a second statistics  query to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#createVisualVariable)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * A custom minimum value set by the user. Use this in conjunction with `maxValue` togenerate statistics between lower and upper bounds. This will be the lowest stop in the returned visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#createVisualVariable)
     */
    minValue?: number;
    /**
     * A custom maximum value set by the user. Use this in conjunction with `minValue` togenerate statistics between lower and upper bounds. This will be the uppermost stop in the returned visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#createVisualVariable)
     */
    maxValue?: number;
    /**
     * A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)instance is required when a `valueExpression` is specified.
     *
     * [Read more...](global.html)
     */
    view?: View;
  }

  export interface opacityCreateVisualVariableParamsLegendOptions extends Object {
    /**
     * The title used to represent the given field or expression in the  [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#createVisualVariable)
     */
    title?: string;
  }

  /**
   * The result object of the [createVisualVariable()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#createVisualVariable) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#VisualVariableResult)
   */
  export interface opacityVisualVariableResult extends Object {
    /**
     * An opacity visual  variable configured based on the statistics of the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#VisualVariableResult)
     */
    visualVariable: OpacityVariable;
    /**
     * Basic statistics returned from a query to the service for the given field or expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#VisualVariableResult)
     */
    statistics: SummaryStatisticsResult;
    /**
     * Indicates whether default values are used in the absence of sufficient  data and/or statistics from the layer. Default values are typically used when all features have the same field  value or no value at all.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#VisualVariableResult)
     */
    defaultValuesUsed: boolean;
    /**
     * Authoring information related to the creation of the visual variable.  This includes information related to UI inputs from sliders and selected themes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#VisualVariableResult)
     */
    authoringInfo: AuthoringInfo;
  }

  interface predominance {
    /**
     * Generates a predominance renderer based on a set of competing numeric fields.Visualizing predominance involves coloring a [layer’s](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) features basedon which attribute among a set of competing numeric attributes wins or beats the others in total count.Common applications of this include visualizing election results, survey results, and demographic majorities.For example, suppose you have a layer of U.S. counties with fields containing the total sales ofvarious crops: wheat, soybeans, corn, cotton, and vegetables. If a feature has the following values for each field:Field Name | Count | Color-----------|-------|------Wheat | 130 | purpleSoybeans | 2000 | blueCorn | 0 | yellowCotton | 300 | greenVegetables | 120 | redThen the renderer symbolizes the feature with a blue color since Soybeans is the predominant crop.The predominant field of a feature is determined based on the result of an Arcade expression generatedby this method. You are required to provide a `layer`, `view`, and list of `fields` to generate this renderer. Optionally, you canset `includeSizeVariable` to `true` to change the size of each feature to indicate how influential the feature is compared to the entire layeras a whole. You can also set `includeOpacityVariable` to `true` to add opacity to each feature depending on howstrong the predominant field is compared to all the other fields. For the example above, the feature would likely beopaque since Soybeans beats all other features combined by a wide margin. If the Soybean total were still the highest, but only 301,then the feature would be very transparent, indicating the Soybean total wins, but not by a wide margin.Other options are provided for convenience for more involved custom visualization authoringapplications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer)
     *
     * @param params Input parameters for generating a predominance visualization based on a set of competing field(s).  See the table below for details of each parameter.
     * @param params.layer The layer  for which the visualization is generated.
     * @param params.view The view instance in which the visualization will be rendered.
     * @param params.fields A set of competing numeric fields used as the basis of the predominance visualization. For example,  if creating an election map, you would indicate the names of each field representing the candidate or political party where  total votes are stored.
     * @param params.basemap The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of  the Esri basemap that will be paired with the output visualization.
     * @param params.includeOpacityVariable Indicates whether to include data-driven opacity in the final renderer. If `true`, features  where the predominant value beats all others by a large margin are given a high opacity. Features where the predominant value beats  others by a small margin will be assigned a low opacity, indicating that while the feature has a winning value, it doesn't win by much.  ![predominance-opacity](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/predominance-opacity.png)
     * @param params.includeSizeVariable Indicates whether to include data-driven size in the final renderer. If `true`, features will be assigned  a sized based on the sum of all competing values in the `fields` param. Features with small total counts will be sized with small icons or lines depending on  the geometry type of the layer, and features with large total counts will be sized with large icons or lines. Enabling this option  is good for visualizing how influential a particular feature is compared to the dataset as a whole. It removes bias introduced by  features with large geographic areas, but relatively small data values.  ![predominance-size](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/predominance-size.png)
     * @param params.outlineOptimizationEnabled Only for polygon layers. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     * @param params.sizeOptimizationEnabled Only for polygon layers when `includeSizeVariable` is `true`. Indicates whether the  icon sizes should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     * @param params.legendOptions Provides options for modifying [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) properties describing  the visualization.
     * @param params.statistics A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.  The `createAgeRenderer()` method generates an Arcade expression and executes a statistics query against the layer for the result of the expression.  If statistics for the expression have already been generated, then pass the object here to avoid making a second statistics  query.
     * @param params.sortBy Indicates how values should be sorted in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).  See the table below for information about values that may be passed to this parameter.  Possible Value | Description  ---------------|------------  count | Unique values/types will be sorted from highest to lowest based on the count of features that fall in each category.  value | Unique values/types will be sorted in the order they were specified in the `fields` parameter.  **Possible Values:** count | value
     * @param params.predominanceScheme In authoring apps,  the user may select a pre-defined predominance scheme. Pass the scheme object to this property to avoid getting one based on the `basemap`.
     * @param params.symbolType The type of symbol to generate. This depends on the view  in which you are working and the desired visualization. This parameter does not need to be specified for layers  with a `mesh` geometry type. Possible values are described below.  | Value | Description |  | ----- | ----------- |  | 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). |  | 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). |  | 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). A SceneView instance must be provided to the `view` parameter if this option is used. |
     * @param params.defaultSymbolEnabled Enables the `defaultSymbol` on the renderer and assigns it to features  with no value.
     * @param params.colorMixMode **This option only applies to generating renderers for mesh SceneLayers**.  Specifies how the symbol's color is applied to the geometry color/texture. See the documentation in  [FillSymbol3DLayer.material](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material) for more context.  See the table below for possible values.  Value | Description  ------|------------  tint | Applies the symbol `color` to the desaturated geometry/texture color.  replace | Removes the geometry/texture color and applies the symbol `color`.  multiply | Multiplies geometry/texture color value with the symbol `color` value. The result is a darker color. Multiplying with white keeps the geometry color the same.
     *
     */
    createRenderer(params: predominanceCreateRendererParams): IPromise<predominanceRendererResult>;
  }

  export const predominance: predominance;

  export interface predominanceCreateRendererParams extends Object {
    /**
     * The layer  for which the visualization is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer;
    /**
     * The view instance in which the visualization will be rendered.
     *
     * [Read more...](global.html)
     */
    view: View;
    /**
     * A set of competing numeric fields used as the basis of the predominance visualization. For example,  if creating an election map, you would indicate the names of each field representing the candidate or political party where  total votes are stored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer)
     */
    fields: predominanceCreateRendererParamsFields[];
    /**
     * The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of  the Esri basemap that will be paired with the output visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer)
     *
     * @default gray
     */
    basemap?: string | Basemap;
    /**
     * Indicates whether to include data-driven opacity in the final renderer. If `true`, features  where the predominant value beats all others by a large margin are given a high opacity. Features where the predominant value beats  others by a small margin will be assigned a low opacity, indicating that while the feature has a winning value, it doesn't win by much.  ![predominance-opacity](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/predominance-opacity.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer)
     */
    includeOpacityVariable?: boolean;
    /**
     * Indicates whether to include data-driven size in the final renderer. If `true`, features will be assigned  a sized based on the sum of all competing values in the `fields` param. Features with small total counts will be sized with small icons or lines depending on  the geometry type of the layer, and features with large total counts will be sized with large icons or lines. Enabling this option  is good for visualizing how influential a particular feature is compared to the dataset as a whole. It removes bias introduced by  features with large geographic areas, but relatively small data values.  ![predominance-size](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/predominance-size.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer)
     */
    includeSizeVariable?: boolean;
    /**
     * Only for polygon layers. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer)
     *
     * @default false
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * Only for polygon layers when `includeSizeVariable` is `true`. Indicates whether the  icon sizes should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer)
     *
     * @default false
     */
    sizeOptimizationEnabled?: boolean;
    /**
     * Provides options for modifying [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) properties describing  the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer)
     */
    legendOptions?: predominanceCreateRendererParamsLegendOptions;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.  The `createAgeRenderer()` method generates an Arcade expression and executes a statistics query against the layer for the result of the expression.  If statistics for the expression have already been generated, then pass the object here to avoid making a second statistics  query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * Indicates how values should be sorted in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).  See the table below for information about values that may be passed to this parameter.  Possible Value | Description  ---------------|------------  count | Unique values/types will be sorted from highest to lowest based on the count of features that fall in each category.  value | Unique values/types will be sorted in the order they were specified in the `fields` parameter.  **Possible Values:** count | value
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer)
     *
     * @default count
     */
    sortBy?: string;
    /**
     * In authoring apps,  the user may select a pre-defined predominance scheme. Pass the scheme object to this property to avoid getting one based on the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer)
     */
    predominanceScheme?: PredominanceScheme;
    /**
     * The type of symbol to generate. This depends on the view  in which you are working and the desired visualization. This parameter does not need to be specified for layers  with a `mesh` geometry type. Possible values are described below.  | Value | Description |  | ----- | ----------- |  | 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). |  | 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). |  | 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). A SceneView instance must be provided to the `view` parameter if this option is used. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer)
     *
     * @default 2d
     */
    symbolType?: string;
    /**
     * Enables the `defaultSymbol` on the renderer and assigns it to features  with no value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer)
     *
     * @default true
     */
    defaultSymbolEnabled?: boolean;
    /**
     * **This option only applies to generating renderers for mesh SceneLayers**.  Specifies how the symbol's color is applied to the geometry color/texture. See the documentation in  [FillSymbol3DLayer.material](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material) for more context.  See the table below for possible values.  Value | Description  ------|------------  tint | Applies the symbol `color` to the desaturated geometry/texture color.  replace | Removes the geometry/texture color and applies the symbol `color`.  multiply | Multiplies geometry/texture color value with the symbol `color` value. The result is a darker color. Multiplying with white keeps the geometry color the same.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer)
     *
     * @default replace
     */
    colorMixMode?: string;
  }

  export interface predominanceCreateRendererParamsFields extends Object {
    /**
     * The name of a numeric field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer)
     */
    name: string;
    /**
     * The label describing the field name (or category) in the legend. This is should be used  if the given field doesn't have an intuitive field name. For example, for a field named `dem` representing the total vote count  for the Democratic party, you can set the label to `Democrat` to clarify the name of the category in the final visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer)
     */
    label?: string;
  }

  export interface predominanceCreateRendererParamsLegendOptions extends Object {
    /**
     * The title used to describe the renderer in the  [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer)
     */
    title?: string;
    /**
     * Indicates whether to include the renderer in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer)
     */
    showLegend?: boolean;
  }

  /**
   * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#createRenderer) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#RendererResult)
   */
  export interface predominanceRendererResult extends Object {
    /**
     * The unique value renderer object representing  the predominance visualization. Set this on a layer's `renderer` property to update its visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#RendererResult)
     */
    renderer: UniqueValueRenderer;
    /**
     * An array of objects describing the value, symbol, and count of  each unique type or category represented in the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#RendererResult)
     */
    predominantCategoryInfos: typeUniqueValueInfo[];
    /**
     * An array of objects describing the values or categories  excluded from consideration in visualizing data from the given fields. The specification of each object matches  that of the objects specified in the `predominantCategoryInfos` property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#RendererResult)
     */
    excludedCategoryInfos: any[];
    /**
     * A size visual  variable representing the total count of all fields included in the predominance visualization. This is included  if the `includeSizeVariable` parameter is true.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#RendererResult)
     */
    size?: sizeVisualVariableResult;
    /**
     * An opacity visual  variable representing the percentage of the total count comprised by the predominant value of all fields. This  variable indicates the strength of a particular value's predominance compared to the other values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#RendererResult)
     */
    opacity?: opacityVisualVariableResult;
    /**
     * The predominance scheme used by the renderer based on the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#RendererResult)
     */
    predominanceScheme: PredominanceScheme;
    /**
     * The ID of the basemap used to determine the optimal fill color of the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html#RendererResult)
     */
    basemapId: string;
  }

  interface relationship {
    /**
     * Generates a relationship renderer (bivariate choropleth) based on a set of competing numeric fields.Each feature's category is determined based on the result of an Arcade expression generated internallyby this method. You are required provide a `layer`, `view`, `field1` name, and `field2` name to generate this renderer. Optionally, you canset the `focus` to change the rotation of the legend and the `numClasses` parameter to change the grid size of the legend.Other options are provided for convenience for more involved custom visualization authoringapplications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     *
     * @param params Input parameters for generating a relationship visualization based on a pair of numeric field(s).  See the table below for details of each parameter.
     * @param params.layer The layer  for which the visualization is generated.
     * @param params.view The view instance in which the visualization will be rendered.
     * @param params.field1 A numeric field that will be used to explore its relationship with `field2`. In the default visualization,  the values of this field are rendered along the vertical axis of the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     * @param params.field2 A numeric field that will be used to explore its relationship with `field1`. In the default visualization,  the values of this field are rendered along the horizontal axis of the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     * @param params.classificationMethod The method for classifying each field's data values. See  [classBreaks](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#classBreaks) for more information  about each classification type.**Possible Values:** quantile | equal-interval | natural-breaks
     * @param params.focus Determines the orientation of the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html). This value does not change the renderer or symbology  of any features in the layer. This affects the legend only. See the table below for a description of the possible values. See the class description  at the top of this page for a more thorough explanation of how to read the legend.  Value | Example | Description  ------|-------------|--------  null | ![relationship-legend-null](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-null.png) | The legend renders as a square. The top right corner of the legend indicates that values from both `field1` and `field2` are considered high. |  HH | ![relationship-legend-hh](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-hh.png) | The legend renders as a diamond with the focus on the top corner where values from both `field1` and `field2` are considered high. |  HL | ![relationship-legend-hl](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-hl.png) | The legend renders as a diamond with the focus on the top corner where values from `field1` are high and values from `field2` are low. |  LH | ![relationship-legend-lh](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-lh.png) | The legend renders as a diamond with the focus on the top corner where values from `field1` are low and values from `field2` are high. |  LL | ![relationship-legend-ll](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-ll.png) | The legend renders as a diamond with the focus on the top corner where values from both `field1` and `field2` are considered low. |
     * @param params.numClasses Indicates the number of classes by which to break up the values of each field. More classes give you more detail, but more colors, making the visualization  more difficult to understand. There are only three possible values.2 classes | 3 classes | 4 classes--|--|---![relationship-breaks-2](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-breaks-2.png) | ![relationship-breaks-3](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-breaks-3.png) | ![relationship-breaks-4](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-breaks-4.png)**Possible Values:** 2 | 3 | 4
     * @param params.basemap The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of  the Esri basemap that will be paired with the output visualization.
     * @param params.outlineOptimizationEnabled For polygon layers only. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     * @param params.legendOptions Provides options for modifying [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) properties describing  the visualization.
     * @param params.relationshipScheme In authoring apps,  the user may select a pre-defined relationship scheme. Pass the scheme object to this property to avoid getting one based on the `basemap`.
     * @param params.symbolType The type of symbol to generate. This depends on the view  in which you are working and the desired visualization. This parameter does not need to be specified for layers  with a `mesh` geometry type. Possible values are described below.  | Value | Description |  | ----- | ----------- |  | 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). |  | 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). |  | 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). A SceneView instance must be provided to the `view` parameter if this option is used. |
     * @param params.defaultSymbolEnabled Enables the `defaultSymbol` on the renderer and assigns it to features  with no value or that fall outside of the prescribed class breaks.
     * @param params.colorMixMode **This option only applies to generating renderers for mesh SceneLayers**.  Specifies how the symbol's color is applied to the geometry color/texture. See the documentation in  [FillSymbol3DLayer.material](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material) for more context.  See the table below for possible values.  Value | Description  ------|------------  tint | Applies the symbol `color` to the desaturated geometry/texture color.  replace | Removes the geometry/texture color and applies the symbol `color`.  multiply | Multiplies geometry/texture color value with the symbol `color` value. The result is a darker color. Multiplying with white keeps the geometry color the same.
     *
     */
    createRenderer(params: relationshipCreateRendererParams): IPromise<relationshipRendererResult>;
    /**
     * Updates a relationship renderer (bivariate choropleth) generated from [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)based on the given input parameters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#updateRenderer)
     *
     * @param params Input parameters for updating a relationship visualization created in [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer).
     * @param params.field1 A numeric field used to explore its relationship with `field2`. In the default visualization,  the values of this field are rendered along the vertical axis of the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     * @param params.field2 A numeric field used to explore its relationship with `field1`. In the default visualization,  the values of this field are rendered along the horizontal axis of the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     * @param params.focus Determines the orientation of the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html). This value does not change the renderer or symbology  of any features in the layer. This affects the legend only. See the table below for a description of the possible values. See the class description  at the top of this page for a more thorough explanation of how to read the legend.  Value | Example | Description  ------|-------------|--------  null | ![relationship-legend-null](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-null.png) | The legend renders as a square. The top right corner of the legend indicates that values from both `field1` and `field2` are considered high. |  HH | ![relationship-legend-hh](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-hh.png) | The legend renders as a diamond with the focus on the top corner where values from both `field1` and `field2` are considered high. |  HL | ![relationship-legend-hl](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-hl.png) | The legend renders as a diamond with the focus on the top corner where values from `field1` are high and values from `field2` are low. |  LH | ![relationship-legend-lh](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-lh.png) | The legend renders as a diamond with the focus on the top corner where values from `field1` are low and values from `field2` are high. |  LL | ![relationship-legend-ll](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-ll.png) | The legend renders as a diamond with the focus on the top corner where values from both `field1` and `field2` are considered low. |
     * @param params.numClasses Indicates the number of classes by which to break up the values of each field. More classes give you more detail, but more colors, making the visualization  more difficult to understand. There are only three possible values.2 classes | 3 classes | 4 classes--|--|---![relationship-breaks-2](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-breaks-2.png) | ![relationship-breaks-3](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-breaks-3.png) | ![relationship-breaks-4](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-breaks-4.png)**Possible Values:** 2 | 3 | 4
     * @param params.colors The array of colors to be used by the symbols in the uniqueValueInfos of the renderer.
     * @param params.renderer The relationship renderer (generated from [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer))  to update with the other parameters provided in this method.
     *
     */
    updateRenderer(params: relationshipUpdateRendererParams): IPromise<UniqueValueRenderer>;
  }

  export const relationship: relationship;

  export interface relationshipCreateRendererParams extends Object {
    /**
     * The layer  for which the visualization is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer;
    /**
     * The view instance in which the visualization will be rendered.
     *
     * [Read more...](global.html)
     */
    view: View;
    /**
     * A numeric field that will be used to explore its relationship with `field2`. In the default visualization,  the values of this field are rendered along the vertical axis of the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     */
    field1: relationshipCreateRendererParamsField1;
    /**
     * A numeric field that will be used to explore its relationship with `field1`. In the default visualization,  the values of this field are rendered along the horizontal axis of the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     */
    field2: relationshipCreateRendererParamsField2;
    /**
     * The method for classifying each field's data values. See  [classBreaks](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#classBreaks) for more information  about each classification type.**Possible Values:** quantile | equal-interval | natural-breaks
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     *
     * @default quantile
     */
    classificationMethod?: string;
    /**
     * Determines the orientation of the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html). This value does not change the renderer or symbology  of any features in the layer. This affects the legend only. See the table below for a description of the possible values. See the class description  at the top of this page for a more thorough explanation of how to read the legend.  Value | Example | Description  ------|-------------|--------  null | ![relationship-legend-null](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-null.png) | The legend renders as a square. The top right corner of the legend indicates that values from both `field1` and `field2` are considered high. |  HH | ![relationship-legend-hh](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-hh.png) | The legend renders as a diamond with the focus on the top corner where values from both `field1` and `field2` are considered high. |  HL | ![relationship-legend-hl](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-hl.png) | The legend renders as a diamond with the focus on the top corner where values from `field1` are high and values from `field2` are low. |  LH | ![relationship-legend-lh](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-lh.png) | The legend renders as a diamond with the focus on the top corner where values from `field1` are low and values from `field2` are high. |  LL | ![relationship-legend-ll](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-ll.png) | The legend renders as a diamond with the focus on the top corner where values from both `field1` and `field2` are considered low. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     */
    focus?: string;
    /**
     * Indicates the number of classes by which to break up the values of each field. More classes give you more detail, but more colors, making the visualization  more difficult to understand. There are only three possible values.2 classes | 3 classes | 4 classes--|--|---![relationship-breaks-2](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-breaks-2.png) | ![relationship-breaks-3](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-breaks-3.png) | ![relationship-breaks-4](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-breaks-4.png)**Possible Values:** 2 | 3 | 4
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     *
     * @default 3
     */
    numClasses?: number;
    /**
     * The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of  the Esri basemap that will be paired with the output visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     *
     * @default gray
     */
    basemap?: string | Basemap;
    /**
     * For polygon layers only. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     *
     * @default false
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * Provides options for modifying [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) properties describing  the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     */
    legendOptions?: relationshipCreateRendererParamsLegendOptions;
    /**
     * In authoring apps,  the user may select a pre-defined relationship scheme. Pass the scheme object to this property to avoid getting one based on the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     */
    relationshipScheme?: RelationshipScheme;
    /**
     * The type of symbol to generate. This depends on the view  in which you are working and the desired visualization. This parameter does not need to be specified for layers  with a `mesh` geometry type. Possible values are described below.  | Value | Description |  | ----- | ----------- |  | 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). |  | 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). |  | 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). A SceneView instance must be provided to the `view` parameter if this option is used. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     *
     * @default 2d
     */
    symbolType?: string;
    /**
     * Enables the `defaultSymbol` on the renderer and assigns it to features  with no value or that fall outside of the prescribed class breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     *
     * @default true
     */
    defaultSymbolEnabled?: boolean;
    /**
     * **This option only applies to generating renderers for mesh SceneLayers**.  Specifies how the symbol's color is applied to the geometry color/texture. See the documentation in  [FillSymbol3DLayer.material](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material) for more context.  See the table below for possible values.  Value | Description  ------|------------  tint | Applies the symbol `color` to the desaturated geometry/texture color.  replace | Removes the geometry/texture color and applies the symbol `color`.  multiply | Multiplies geometry/texture color value with the symbol `color` value. The result is a darker color. Multiplying with white keeps the geometry color the same.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     *
     * @default replace
     */
    colorMixMode?: string;
  }

  export interface relationshipCreateRendererParamsField1 extends Object {
    /**
     * The name of a numeric field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     */
    field: string;
    /**
     * The name of a numeric field used to normalize the given `field`. In choropleth visualizations  it is best practice to normalize your data values if they haven't already been normalized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     */
    normalizationField?: string;
    /**
     * The maximum bound of values to visualize in the given field. If a feature's value is greater than  this value, then it will be assigned the default symbol of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     */
    maxValue?: number;
    /**
     * The minimum bound of values to visualize in the given field. If a feature's value is less than  this value, then it will be assigned the default symbol of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     */
    minValue?: number;
  }

  export interface relationshipCreateRendererParamsField2 extends Object {
    /**
     * The name of a numeric field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     */
    field: string;
    /**
     * The name of a numeric field used to normalize the given `field`. In choropleth visualizations  it is best practice to normalize your data values if they haven't already been normalized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     */
    normalizationField?: string;
    /**
     * The maximum bound of values to visualize in the given field. If a feature's value is greater than  this value, then it will be assigned the default symbol of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     */
    maxValue?: number;
    /**
     * The minimum bound of values to visualize in the given field. If a feature's value is less than  this value, then it will be assigned the default symbol of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     */
    minValue?: number;
  }

  export interface relationshipCreateRendererParamsLegendOptions extends Object {
    /**
     * The title used to describe the renderer in the  [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     */
    title?: string;
    /**
     * Indicates whether to include the renderer in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer)
     */
    showLegend?: boolean;
  }

  export interface relationshipUpdateRendererParams extends Object {
    /**
     * A numeric field used to explore its relationship with `field2`. In the default visualization,  the values of this field are rendered along the vertical axis of the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#updateRenderer)
     */
    field1: relationshipUpdateRendererParamsField1;
    /**
     * A numeric field used to explore its relationship with `field1`. In the default visualization,  the values of this field are rendered along the horizontal axis of the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#updateRenderer)
     */
    field2: relationshipUpdateRendererParamsField2;
    /**
     * Determines the orientation of the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html). This value does not change the renderer or symbology  of any features in the layer. This affects the legend only. See the table below for a description of the possible values. See the class description  at the top of this page for a more thorough explanation of how to read the legend.  Value | Example | Description  ------|-------------|--------  null | ![relationship-legend-null](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-null.png) | The legend renders as a square. The top right corner of the legend indicates that values from both `field1` and `field2` are considered high. |  HH | ![relationship-legend-hh](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-hh.png) | The legend renders as a diamond with the focus on the top corner where values from both `field1` and `field2` are considered high. |  HL | ![relationship-legend-hl](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-hl.png) | The legend renders as a diamond with the focus on the top corner where values from `field1` are high and values from `field2` are low. |  LH | ![relationship-legend-lh](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-lh.png) | The legend renders as a diamond with the focus on the top corner where values from `field1` are low and values from `field2` are high. |  LL | ![relationship-legend-ll](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-legend-ll.png) | The legend renders as a diamond with the focus on the top corner where values from both `field1` and `field2` are considered low. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#updateRenderer)
     */
    focus?: string;
    /**
     * Indicates the number of classes by which to break up the values of each field. More classes give you more detail, but more colors, making the visualization  more difficult to understand. There are only three possible values.2 classes | 3 classes | 4 classes--|--|---![relationship-breaks-2](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-breaks-2.png) | ![relationship-breaks-3](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-breaks-3.png) | ![relationship-breaks-4](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/smartmapping/relationship-breaks-4.png)**Possible Values:** 2 | 3 | 4
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#updateRenderer)
     */
    numClasses: number;
    /**
     * The array of colors to be used by the symbols in the uniqueValueInfos of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#updateRenderer)
     */
    colors: Color[];
    /**
     * The relationship renderer (generated from [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer))  to update with the other parameters provided in this method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#updateRenderer)
     */
    renderer: UniqueValueRenderer;
  }

  export interface relationshipUpdateRendererParamsField1 extends Object {
    /**
     * The name of a numeric field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#updateRenderer)
     */
    field: string;
    /**
     * The name of a numeric field used to normalize the given `field`. In choropleth visualizations  it is best practice to normalize your data values if they haven't already been normalized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#updateRenderer)
     */
    normalizationField?: string;
    /**
     * The class breaks  for the first field used in the relationship visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#updateRenderer)
     */
    classBreakInfos: ClassBreak[];
  }

  export interface relationshipUpdateRendererParamsField2 extends Object {
    /**
     * The name of a numeric field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#updateRenderer)
     */
    field: string;
    /**
     * The name of a numeric field used to normalize the given `field`. In choropleth visualizations  it is best practice to normalize your data values if they haven't already been normalized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#updateRenderer)
     */
    normalizationField?: string;
    /**
     * The class breaks  for the second field used in the relationship visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#updateRenderer)
     */
    classBreakInfos: ClassBreak[];
  }

  /**
   * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#createRenderer) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#RendererResult)
   */
  export interface relationshipRendererResult extends Object {
    /**
     * The renderer object representing  the relationship visualization. Set this on a layer's `renderer` property to update its visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#RendererResult)
     */
    renderer: UniqueValueRenderer;
    /**
     * Describes each class break for both fields considered in the relationship visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#RendererResult)
     */
    classBreaks: RendererResultClassBreaks;
    /**
     * Describes each  container or bin used in the visualization. Each unique value info object describes a class break for `field1`  and `field2`. Therefore, features with the same color fall share will have values that fall in the same class break  for `field1` and the same class break for `field2`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#RendererResult)
     */
    uniqueValueInfos: typeUniqueValueInfo[];
    /**
     * The relationship scheme used by the renderer based on the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#RendererResult)
     */
    relationshipScheme: RelationshipScheme;
    /**
     * The ID of the basemap used to determine the optimal fill colors of the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#RendererResult)
     */
    basemapId: string;
  }

  export interface RendererResultClassBreaks extends Object {
    /**
     * The class breaks generated for values in the `field1` parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#RendererResult)
     */
    field1: ClassBreaksResult;
    /**
     * The class breaks generated for values in the `field2` parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html#RendererResult)
     */
    field2: ClassBreaksResult;
  }

  interface size {
    /**
     * Generates a continuous size [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html) representing the age of features basedon one or more fields. The age of a feature is calculated based on a given `startTime` and `endTime`, one of whichmust be a date field in the input `layer`. This method generates an Arcade expression and calculates statistics on theoutput of the expression to accomplish this. The resultingrenderer contains a continuous size visual variable that maps optimal sizes based on the indicated basemapto data values based on the resulting statistics of the expression.You are required to provide a `layer`, `view`, `startTime`, and `endTime` to generate this renderer. Optionally, you canset a `unit` for the visualization. Other options are provided for convenience for more involved custom visualization authoringapplications. For example, if you already generated statistics in another operation, youcan pass the statistics object to the `statistics` parameter to avoid making an extra call to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createAgeRenderer)
     *
     * @param params Input parameters for generating a continuous size visualization of age for time datareturned from start and/or end date field(s). See the table below for details of each parameter.
     * @param params.layer The layer  for which the visualization is generated.
     * @param params.view The view instance in which the visualization will be rendered.
     * @param params.startTime The name of the field, or a date value representing the start time in the  age calculation. If a date value is specified, then the `endTime` parameter must reference a Date field in the layer.
     * @param params.endTime The name of the field, or a date value representing the end time in the  age calculation. If a date value is specified, then the `startTime` parameter must reference a Date field in the layer.
     * @param params.unit The time unit used to calculate the difference between `endTime` and `startTime`. If a unit  is not specified, then a suggested unit is determined based on the spread and distribution of the data.  **Possible Values:** years | months | days | hours | minutes | seconds
     * @param params.basemap The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of  the Esri basemap that will be paired with the output visualization.
     * @param params.outlineOptimizationEnabled Only for polygon layers. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     * @param params.sizeOptimizationEnabled Only for polygon layers in 2D MapViews. Indicates whether  icon sizes should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     * @param params.legendOptions Provides options for modifying [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) properties describing  the visualization.
     * @param params.statistics A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.  The `createAgeRenderer()` method generates an Arcade expression and executes a statistics query against the layer for the result of the expression.  If statistics for the expression have already been generated, then pass the object here to avoid making a second statistics  query.
     * @param params.sizeScheme In authoring apps,  the user may select a pre-defined size scheme. Pass the scheme object to this property to avoid getting one based on the `basemap`.
     * @param params.symbolType The type of symbol to generate. This depends on the view  in which you are working and the desired visualization. This parameter does not need to be specified for layers  with a `mesh` geometry type. Possible values are described below.  | Value | Description |  | ----- | ----------- |  | 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). |  | 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). |  | 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). A SceneView instance must be provided to the `view` parameter if this option is used. |
     * @param params.defaultSymbolEnabled Enables the `defaultSymbol` on the renderer and assigns it to features  with no value.
     *
     */
    createAgeRenderer(params: sizeCreateAgeRendererParams): IPromise<sizeAgeRendererResult>;
    /**
     * Generates a [ClassBreaksRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html) that may be applied directly to thelayer used to call this method. The resulting renderer defines the symbol size of each featurebased on the value of the given `field` value. A default size scheme is determined based on the given `basemap`.Depending on the `classificationMethod`, class breaks (or data ranges) are generated based on the statistics of the data.Each feature is assigned a size based on the class break in which the value of the `field` falls.In most cases you will provide a `layer`, `basemap`, `field`, and `classificationMethod` to generate this renderer.This is a scenario in whichthe statistics of the data aren't well known and the user doesn't know what sizesto use in the visualization. You can also use a `valueExpression` instead of a `field` to visualizefeatures based on a value returned from a script executed at runtime.The other options are provided for convenience for more involved custom visualization authoringapplications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     *
     * @param params Input parameters for generating a classed size visualization based on datareturned from a given field or expression. See the table below for details of each parameter.
     * @param params.layer The layer for which the visualizationis generated.
     * @param params.basemap The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     * @param params.field The name of the field whose data will be queried for statistics and classified.  This property is ignored if a `valueExpression` is used.
     * @param params.normalizationField The name of the field to normalize the values of the given`field`. Providing a normalization field helps minimize some visualization errors and standardizes the dataso all features are visualized with minimal bias due to area differences or count variation. This option iscommonly used when visualizing densities.
     * @param params.normalizationType Indicates how the data is normalized.The data value obtained from the `field`is normalized in one of the following ways before it is compared with the class breaks. See thetable below for a list of possible values.Possible Value | Description---------------|------------field | Divides the `field` value by the value of `normalizationField`. This value is set by default if the `normalizationField` is provided.log | Computes the base 10 logarithm of the data value. This can be a useful approach for some data distributions because it reduces the influence of very large data values.percent-of-total | Divides the data value by the sum of all data values then multiplies by 100. Use `normalizationTotal` to define the total value by which to normalize. This value is set by default if the `normalizationTotal` is provided.With the exception of `log` normalization, data normalization creates a ratio by dividing two values.When comparing attribute values between features, normalization minimizes the effect of varyingmap areas and the number of observations. For example, dividing the 18 to 30 year old population by thearea of a polygon feature yields a density value that can be compared evenly with other features,regardless of their size.
     * @param params.normalizationTotal When `normalizationType` is `percent-of-total`, this property contains the total of all data values.
     * @param params.classificationMethod The classification method used for generating breaks.See the table below for a list of possible values.Possible Value | Description---------------|------------equal-interval | Divides the range of attribute values into equal-sized subranges. For example, if you specify three classes for a field whose values range from 0 to 300, this method will create three classes with ranges of 0–100, 101–200, and 201–300. Equal interval is best applied to familiar data ranges, such as percentages and temperature. This method emphasizes the amount of an attribute value relative to other values. For example, it could show if a store is part of the group of stores that make up the top one-third of all sales.natural-breaks | Groups similar values that maximize the differences between classes. Features are divided into classes whose boundaries are set where there are relatively big differences in the data values. Natural breaks are data-specific classifications and not useful for comparing multiple maps built from different underlying information.quantile | Assigns the same number of data values to each class. This is well suited to linearly distributed data. Because features are grouped in equal numbers in each class, the resulting map can often be misleading. Similar features can potentially be placed in adjacent classes, or features with widely different values can be put in the same class. You can minimize this distortion by increasing the number of classes.standard-deviation | Creates class breaks with equal value ranges that are a proportion of the standard deviation. This is usually done at intervals of one, one-half, one-third, or one-fourth standard deviations from the mean.
     * @param params.standardDeviationInterval If a `standard-deviation` classification method is used, then this indicates the interval by which to generate class breaks.**Possible Values:** 1 | 0.5 | 0.33 | 0.25
     * @param params.numClasses The number of class breaks to generate. This is ignored if a `standard-deviation` classification method is specified.
     * @param params.sizeScheme In authoring apps,the user may select a pre-defined size scheme. Pass the scheme object to this property to avoid getting onebased on the `basemap`.
     * @param params.valueExpression An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     * @param params.valueExpressionTitle Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     * @param params.sqlExpression A SQL expression evaluating to a number.
     * @param params.sqlWhere A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     * @param params.outlineOptimizationEnabled Only for polygon layers. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     * @param params.legendOptions Provides options for setting a title to describe a fieldinstead of using the field name. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     * @param params.minValue A minimum value set by the user. Use this in conjunction with `maxValue` togenerate class breaks between lower and upper bounds. This will be the lower bound of the lowest class break.
     * @param params.maxValue A maximum value set by the user. Use this in conjunction with `minValue` togenerate class breaks between lower and upper bounds. This will be the upper bound of the highest class break.
     * @param params.defaultSymbolEnabled Enables the `defaultSymbol` on the renderer and assigns it to featureswith no value and features that do not fall within the configured data range.
     * @param params.view The view instance in which the visualization will be rendered.A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) is required if `symbolType = "3d-volumetric"` or `3d-volumetric-uniform`.The relevant SceneView or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) is required when a `valueExpression` is specified.
     * @param params.symbolType The type of symbol to generate. This depends on the viewin which you are working and the desired visualization. Possible values are described below.| Value | Description || ----- | ----------- || 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). || 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). || 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) and only the symbol's height should be variable, for example with cylinders. A SceneView instance must be provided to the `view` parameter if this option is used. || 3d-volumetric-uniform | Generates a visualization using uniformly sized 3D symbols with volumetric symbol layers. Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) and the symbol should be sized uniformly, for example with spheres. A SceneView instance must be provided to the `view` parameter if this option is used. |
     *
     */
    createClassBreaksRenderer(params: sizeCreateClassBreaksRendererParams): IPromise<sizeClassBreaksRendererResult>;
    /**
     * Generates a [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html) that may be applied directly to thelayer used to call this method. Therenderer contains a continuous size visual variable that maps marker sizesto specific stop values based on queried statistics from the indicated field or expression.In most cases you will provide a `layer`, `basemap`, and `field` to generate this renderer.This is a scenario in whichthe statistics of the data aren't well known and the user doesn't know what sizesto use in the visualization. You can also use a `valueExpression` instead of a `field` to visualizefeatures based on a value returned from a script executed at runtime.The other options are provided for convenience for more involved custom visualization authoringapplications. For example, if you already generated statistics in another operation, youcan pass the statistics object to the `statistics` parameter to avoid making an extra call to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     *
     * @param params Input parameters for generating size visual variables based on datareturned from a given field or expression. See the table below for details of each parameter.
     * @param params.layer The layer for which the rendereris generated.
     * @param params.field The name of the field whose data will be queried for statistics and used forthe basis of the data-driven visualization.  This property is ignored if a `valueExpression` is used.
     * @param params.normalizationField The name of the field to normalize the values of the given`field`. Providing a normalization field helps minimize some visualization errors and standardizes the dataso all features are visualized with minimal bias due to area differences or count variation. This option iscommonly used when visualizing densities.
     * @param params.basemap The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     * @param params.sizeScheme In authoring apps,the user may select a pre-defined size scheme. Pass the scheme object to this property to avoid getting onebased on the `basemap`.
     * @param params.valueExpression An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     * @param params.valueExpressionTitle Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     * @param params.sqlExpression A SQL expression evaluating to a number.
     * @param params.sqlWhere A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     * @param params.outlineOptimizationEnabled Only for polygon layers. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     * @param params.sizeOptimizationEnabled Only for polygon layers in 2D MapViews. Indicates whether  icon sizes should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     * @param params.legendOptions Provides options for setting a title to a field when an expression is providedinstead of a field name. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     * @param params.statistics A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.If statistics for the field have already been generated, then pass the object here to avoid making a second statisticsquery to the server.
     * @param params.minValue A custom minimum value set by the user. Use this in conjunction with `maxValue` togenerate statistics between lower and upper bounds. This will be the lowest stop in the returned size visual variable.
     * @param params.maxValue A custom maximum value set by the user. Use this in conjunction with `minValue` togenerate statistics between lower and upper bounds. This will be the uppermost stop in the returned size visual variable.
     * @param params.defaultSymbolEnabled Enables the `defaultSymbol` on the renderer and assigns it to featureswith no value and features that do not fall within the configured data range.
     * @param params.view The view instance in which the visualization will be rendered.A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) is required if `symbolType = "3d-volumetric"` or `3d-volumetric-uniform`.The relevant SceneView or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) is required when a `valueExpression` is specified.
     * @param params.symbolType The type of symbol to generate. This depends on the viewin which you are working and the desired visualization. Possible values are described below.| Value | Description || ----- | ----------- || 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). || 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). || 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) and only the symbol's height should be variable, for example with cylinders. A SceneView instance must be provided to the `view` parameter if this option is used. || 3d-volumetric-uniform | Generates a visualization using uniformly sized 3D symbols with volumetric symbol layers. Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) and the symbol should be sized uniformly, for example with spheres. A SceneView instance must be provided to the `view` parameter if this option is used. |
     *
     */
    createContinuousRenderer(params: sizeCreateContinuousRendererParams): IPromise<sizeContinuousRendererResult>;
    /**
     * This method generates an array of size visual variableswith default stops that are optimally chosen based on the statisticsqueried for the indicated field or expression and mapped to appropriate sizes.There are two different ways this method may be called. The most common case is byproviding a `layer`, `basemap`, and `field`. This is the scenario wherethe statistics of the data aren't well known and the user doesn't know what sizesto use. You can optionally use a `valueExpression` instead of a field to visualizefeatures based on a numeric value returned from a script executed at runtime.The other options are provided for convenience for more involved custom visualization authoringapplications. For example, if you already generated statistics in another operation, youcan pass the object in the `statistics` parameter to avoid making an extra call to the server.You can also provide a `sizeScheme` if you don't want one picked for you. In this case the `basemap` and`theme` options would be ignored.The resulting array of visual variables will contain exactly one size visual variable unless the`axis` parameter is set to "height".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables)
     *
     * @param params Input parameters for generating size visual variables based on datareturned from a given field or expression. See the table below for details of each parameter.
     * @param params.layer The layer for which thevisual variables are generated.
     * @param params.field The name of the field whose data will be queried for statistics and used forthe basis of the data-driven visualization.  This property is ignored if a `valueExpression` is used.
     * @param params.normalizationField The name of the field to normalize the values of the given`field`. Providing a normalization field helps minimize some visualization errors and standardizes the dataso all features are visualized with minimal bias due to area differences or count variation. This option iscommonly used when visualizing densities.
     * @param params.basemap The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     * @param params.sizeScheme In authoring apps,the user may select a pre-defined size scheme. Pass the scheme object to this property to avoid getting onebased on the `basemap`.
     * @param params.valueExpression An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     * @param params.valueExpressionTitle Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     * @param params.sqlExpression A SQL expression evaluating to a number.
     * @param params.sqlWhere A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     * @param params.sizeOptimizationEnabled Only for polygon layers in 2D MapViews. Indicates whether  icon sizes should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     * @param params.legendOptions Provides options for setting a title to a field when an expression is providedinstead of a field name. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     * @param params.statistics A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.If statistics for the field have already been generated, then pass the object here to avoid making a second statisticsquery to the server.
     * @param params.minValue A custom minimum value set by the user. Use this in conjunction with `maxValue` togenerate statistics between lower and upper bounds. This will be the lowest stop in the returned size visual variable.
     * @param params.maxValue A custom maximum value set by the user. Use this in conjunction with `minValue` togenerate statistics between lower and upper bounds. This will be the uppermost stop in the returned size visual variable.
     * @param params.view When generating 3D symbols, a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) instanceis required. The relevant SceneView or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) is required when a `valueExpression` is specified.
     * @param params.worldScale Indicates if the size units of the symbols will be in meters. This should be `true`when generating visualizations with 3D volumetric symbology. A `view` must be provided if this property is set to `true`.
     * @param params.axis When set to `all`, a single size variable that scales uniformly in alldimensions is generated. When set to `height`, the result contains two size visual variables:the first one sizes the height according to the field statistics, while the second defines a constant size forwidth and depth.**Possible Values:** all | height
     *
     */
    createVisualVariables(params: sizeCreateVisualVariablesParams): IPromise<sizeVisualVariableResult>;
  }

  export const size: size;

  /**
   * The result object of the [createAgeRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createAgeRenderer) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#AgeRendererResult)
   */
  export interface sizeAgeRendererResult extends Object {
    /**
     * The renderer object configured to best  match the given basemap and the spread of the data. Set this on a layer's `renderer` property to  update its visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#AgeRendererResult)
     */
    renderer: ClassBreaksRenderer;
    /**
     * Size visual  variables configured based on the statistics of the data and the given basemap and scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#AgeRendererResult)
     */
    visualVariables: SizeVariable[];
    /**
     * The time unit used to represent age in the output `renderer`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#AgeRendererResult)
     */
    unit: string;
    /**
     * The size scheme used by the visual variables.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#AgeRendererResult)
     */
    sizeScheme: SizeScheme;
    /**
     * Indicates whether default values are used in the absence of sufficient  data and/or statistics from the layer. Default values are typically used when all features have the same field  value or no value at all.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#AgeRendererResult)
     */
    defaultValuesUsed: boolean;
    /**
     * Basic statistics returned from a query for the generated expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#AgeRendererResult)
     */
    statistics: SummaryStatisticsResult;
    /**
     * The ID of the basemap used to determine the optimal fill color of the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#AgeRendererResult)
     */
    basemapId: string;
  }

  /**
   * The result object of the [createClassBreaksRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#ClassBreaksRendererResult)
   */
  export interface sizeClassBreaksRendererResult extends Object {
    /**
     * The renderer object configured to bestmatch the given basemap and the spread of the data. Set this on a layer's `renderer` property toupdate its visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#ClassBreaksRendererResult)
     */
    renderer: ClassBreaksRenderer;
    /**
     * This objectdescribes class breaks generated from data in a layer for a given field with a specified classification method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#ClassBreaksRendererResult)
     */
    classBreaksResult: ClassBreaksResult;
    /**
     * The size scheme used by the visual variables.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#ClassBreaksRendererResult)
     */
    sizeScheme: SizeScheme;
    /**
     * Indicates whether default values are used in the absence of sufficientdata and/or statistics from the layer. Default values are typically used when all features have the same fieldvalue or no value at all.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#ClassBreaksRendererResult)
     */
    defaultValuesUsed: boolean;
    /**
     * The ID of the basemap used to determine the optimal fill color of the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#ClassBreaksRendererResult)
     */
    basemapId: string;
  }

  /**
   * The result object of the [createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#ContinuousRendererResult)
   */
  export interface sizeContinuousRendererResult extends Object {
    /**
     * The renderer object configured to bestmatch the given basemap and the spread of the data. Set this on a layer's `renderer` property toupdate its visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#ContinuousRendererResult)
     */
    renderer: ClassBreaksRenderer;
    /**
     * Size visualvariables configured based on the statistics of the data and the given basemap and scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#ContinuousRendererResult)
     */
    visualVariables: SizeVariable[];
    /**
     * The size scheme used by the visual variables.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#ContinuousRendererResult)
     */
    sizeScheme: SizeScheme;
    /**
     * Indicates whether default values are used in the absence of sufficientdata and/or statistics from the layer. Default values are typically used when all features have the same fieldvalue or no value at all.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#ContinuousRendererResult)
     */
    defaultValuesUsed: boolean;
    /**
     * Basic statistics returned from a query to the service for data from the given field name or expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#ContinuousRendererResult)
     */
    statistics: SummaryStatisticsResult;
    /**
     * The ID of the basemap used to determine the optimal fill color of the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#ContinuousRendererResult)
     */
    basemapId: string;
  }

  export interface sizeCreateAgeRendererParams extends Object {
    /**
     * The layer  for which the visualization is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createAgeRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer;
    /**
     * The view instance in which the visualization will be rendered.
     *
     * [Read more...](global.html)
     */
    view: View;
    /**
     * The name of the field, or a date value representing the start time in the  age calculation. If a date value is specified, then the `endTime` parameter must reference a Date field in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createAgeRenderer)
     */
    startTime: Date | string | number;
    /**
     * The name of the field, or a date value representing the end time in the  age calculation. If a date value is specified, then the `startTime` parameter must reference a Date field in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createAgeRenderer)
     */
    endTime: Date | string | number;
    /**
     * The time unit used to calculate the difference between `endTime` and `startTime`. If a unit  is not specified, then a suggested unit is determined based on the spread and distribution of the data.  **Possible Values:** years | months | days | hours | minutes | seconds
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createAgeRenderer)
     */
    unit?: string;
    /**
     * The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of  the Esri basemap that will be paired with the output visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createAgeRenderer)
     *
     * @default gray
     */
    basemap?: string | Basemap;
    /**
     * Only for polygon layers. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createAgeRenderer)
     *
     * @default false
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * Only for polygon layers in 2D MapViews. Indicates whether  icon sizes should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createAgeRenderer)
     *
     * @default false
     */
    sizeOptimizationEnabled?: boolean;
    /**
     * Provides options for modifying [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) properties describing  the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createAgeRenderer)
     */
    legendOptions?: sizeCreateAgeRendererParamsLegendOptions;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.  The `createAgeRenderer()` method generates an Arcade expression and executes a statistics query against the layer for the result of the expression.  If statistics for the expression have already been generated, then pass the object here to avoid making a second statistics  query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createAgeRenderer)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * In authoring apps,  the user may select a pre-defined size scheme. Pass the scheme object to this property to avoid getting one based on the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createAgeRenderer)
     */
    sizeScheme?: SizeScheme;
    /**
     * The type of symbol to generate. This depends on the view  in which you are working and the desired visualization. This parameter does not need to be specified for layers  with a `mesh` geometry type. Possible values are described below.  | Value | Description |  | ----- | ----------- |  | 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). |  | 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). |  | 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). A SceneView instance must be provided to the `view` parameter if this option is used. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createAgeRenderer)
     *
     * @default 2d
     */
    symbolType?: string;
    /**
     * Enables the `defaultSymbol` on the renderer and assigns it to features  with no value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createAgeRenderer)
     *
     * @default true
     */
    defaultSymbolEnabled?: boolean;
  }

  export interface sizeCreateAgeRendererParamsLegendOptions extends Object {
    /**
     * The title used to represent the age size ramp in the  [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createAgeRenderer)
     */
    title?: string;
    /**
     * Indicates whether to include the age renderer in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createAgeRenderer)
     */
    showLegend?: boolean;
  }

  export interface sizeCreateClassBreaksRendererParams extends Object {
    /**
     * The layer for which the visualizationis generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer;
    /**
     * The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     *
     * @default gray
     */
    basemap?: string | Basemap;
    /**
     * The name of the field whose data will be queried for statistics and classified.  This property is ignored if a `valueExpression` is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     */
    field: string;
    /**
     * The name of the field to normalize the values of the given`field`. Providing a normalization field helps minimize some visualization errors and standardizes the dataso all features are visualized with minimal bias due to area differences or count variation. This option iscommonly used when visualizing densities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     */
    normalizationField?: string;
    /**
     * Indicates how the data is normalized.The data value obtained from the `field`is normalized in one of the following ways before it is compared with the class breaks. See thetable below for a list of possible values.Possible Value | Description---------------|------------field | Divides the `field` value by the value of `normalizationField`. This value is set by default if the `normalizationField` is provided.log | Computes the base 10 logarithm of the data value. This can be a useful approach for some data distributions because it reduces the influence of very large data values.percent-of-total | Divides the data value by the sum of all data values then multiplies by 100. Use `normalizationTotal` to define the total value by which to normalize. This value is set by default if the `normalizationTotal` is provided.With the exception of `log` normalization, data normalization creates a ratio by dividing two values.When comparing attribute values between features, normalization minimizes the effect of varyingmap areas and the number of observations. For example, dividing the 18 to 30 year old population by thearea of a polygon feature yields a density value that can be compared evenly with other features,regardless of their size.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     */
    normalizationType?: string;
    /**
     * When `normalizationType` is `percent-of-total`, this property contains the total of all data values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     */
    normalizationTotal?: number;
    /**
     * The classification method used for generating breaks.See the table below for a list of possible values.Possible Value | Description---------------|------------equal-interval | Divides the range of attribute values into equal-sized subranges. For example, if you specify three classes for a field whose values range from 0 to 300, this method will create three classes with ranges of 0–100, 101–200, and 201–300. Equal interval is best applied to familiar data ranges, such as percentages and temperature. This method emphasizes the amount of an attribute value relative to other values. For example, it could show if a store is part of the group of stores that make up the top one-third of all sales.natural-breaks | Groups similar values that maximize the differences between classes. Features are divided into classes whose boundaries are set where there are relatively big differences in the data values. Natural breaks are data-specific classifications and not useful for comparing multiple maps built from different underlying information.quantile | Assigns the same number of data values to each class. This is well suited to linearly distributed data. Because features are grouped in equal numbers in each class, the resulting map can often be misleading. Similar features can potentially be placed in adjacent classes, or features with widely different values can be put in the same class. You can minimize this distortion by increasing the number of classes.standard-deviation | Creates class breaks with equal value ranges that are a proportion of the standard deviation. This is usually done at intervals of one, one-half, one-third, or one-fourth standard deviations from the mean.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     *
     * @default equal-interval
     */
    classificationMethod?: string;
    /**
     * If a `standard-deviation` classification method is used, then this indicates the interval by which to generate class breaks.**Possible Values:** 1 | 0.5 | 0.33 | 0.25
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     *
     * @default 1
     */
    standardDeviationInterval?: number;
    /**
     * The number of class breaks to generate. This is ignored if a `standard-deviation` classification method is specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     *
     * @default 5
     */
    numClasses?: number;
    /**
     * In authoring apps,the user may select a pre-defined size scheme. Pass the scheme object to this property to avoid getting onebased on the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     */
    sizeScheme?: SizeScheme;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     */
    valueExpressionTitle?: string;
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     */
    sqlWhere?: string;
    /**
     * Only for polygon layers. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     *
     * @default false
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * Provides options for setting a title to describe a fieldinstead of using the field name. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     */
    legendOptions?: sizeCreateClassBreaksRendererParamsLegendOptions;
    /**
     * A minimum value set by the user. Use this in conjunction with `maxValue` togenerate class breaks between lower and upper bounds. This will be the lower bound of the lowest class break.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     */
    minValue?: number;
    /**
     * A maximum value set by the user. Use this in conjunction with `minValue` togenerate class breaks between lower and upper bounds. This will be the upper bound of the highest class break.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     */
    maxValue?: number;
    /**
     * Enables the `defaultSymbol` on the renderer and assigns it to featureswith no value and features that do not fall within the configured data range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     *
     * @default true
     */
    defaultSymbolEnabled?: boolean;
    /**
     * The view instance in which the visualization will be rendered.A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) is required if `symbolType = "3d-volumetric"` or `3d-volumetric-uniform`.The relevant SceneView or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) is required when a `valueExpression` is specified.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * The type of symbol to generate. This depends on the viewin which you are working and the desired visualization. Possible values are described below.| Value | Description || ----- | ----------- || 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). || 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). || 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) and only the symbol's height should be variable, for example with cylinders. A SceneView instance must be provided to the `view` parameter if this option is used. || 3d-volumetric-uniform | Generates a visualization using uniformly sized 3D symbols with volumetric symbol layers. Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) and the symbol should be sized uniformly, for example with spheres. A SceneView instance must be provided to the `view` parameter if this option is used. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     *
     * @default 2d
     */
    symbolType?: string;
  }

  export interface sizeCreateClassBreaksRendererParamsLegendOptions extends Object {
    /**
     * The title used to represent the given field or expression in the[Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)
     */
    title?: string;
  }

  export interface sizeCreateContinuousRendererParams extends Object {
    /**
     * The layer for which the rendereris generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer;
    /**
     * The name of the field whose data will be queried for statistics and used forthe basis of the data-driven visualization.  This property is ignored if a `valueExpression` is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     */
    field?: string;
    /**
     * The name of the field to normalize the values of the given`field`. Providing a normalization field helps minimize some visualization errors and standardizes the dataso all features are visualized with minimal bias due to area differences or count variation. This option iscommonly used when visualizing densities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     */
    normalizationField?: string;
    /**
     * The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     *
     * @default gray
     */
    basemap?: string | Basemap;
    /**
     * In authoring apps,the user may select a pre-defined size scheme. Pass the scheme object to this property to avoid getting onebased on the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     */
    sizeScheme?: SizeScheme;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     */
    valueExpressionTitle?: string;
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     */
    sqlWhere?: string;
    /**
     * Only for polygon layers. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     *
     * @default false
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * Only for polygon layers in 2D MapViews. Indicates whether  icon sizes should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     *
     * @default false
     */
    sizeOptimizationEnabled?: boolean;
    /**
     * Provides options for setting a title to a field when an expression is providedinstead of a field name. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     */
    legendOptions?: sizeCreateContinuousRendererParamsLegendOptions;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.If statistics for the field have already been generated, then pass the object here to avoid making a second statisticsquery to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * A custom minimum value set by the user. Use this in conjunction with `maxValue` togenerate statistics between lower and upper bounds. This will be the lowest stop in the returned size visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     */
    minValue?: number;
    /**
     * A custom maximum value set by the user. Use this in conjunction with `minValue` togenerate statistics between lower and upper bounds. This will be the uppermost stop in the returned size visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     */
    maxValue?: number;
    /**
     * Enables the `defaultSymbol` on the renderer and assigns it to featureswith no value and features that do not fall within the configured data range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     *
     * @default true
     */
    defaultSymbolEnabled?: boolean;
    /**
     * The view instance in which the visualization will be rendered.A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) is required if `symbolType = "3d-volumetric"` or `3d-volumetric-uniform`.The relevant SceneView or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) is required when a `valueExpression` is specified.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * The type of symbol to generate. This depends on the viewin which you are working and the desired visualization. Possible values are described below.| Value | Description || ----- | ----------- || 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). || 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). || 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) and only the symbol's height should be variable, for example with cylinders. A SceneView instance must be provided to the `view` parameter if this option is used. || 3d-volumetric-uniform | Generates a visualization using uniformly sized 3D symbols with volumetric symbol layers. Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) and the symbol should be sized uniformly, for example with spheres. A SceneView instance must be provided to the `view` parameter if this option is used. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     *
     * @default 2d
     */
    symbolType?: string;
  }

  export interface sizeCreateContinuousRendererParamsLegendOptions extends Object {
    /**
     * The title used to represent the given field or expression in the[Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     */
    title?: string;
    /**
     * Indicates whether to describe the renderer in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)
     */
    showLegend?: boolean;
  }

  export interface sizeCreateVisualVariablesParams extends Object {
    /**
     * The layer for which thevisual variables are generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer;
    /**
     * The name of the field whose data will be queried for statistics and used forthe basis of the data-driven visualization.  This property is ignored if a `valueExpression` is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables)
     */
    field: string;
    /**
     * The name of the field to normalize the values of the given`field`. Providing a normalization field helps minimize some visualization errors and standardizes the dataso all features are visualized with minimal bias due to area differences or count variation. This option iscommonly used when visualizing densities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables)
     */
    normalizationField?: string;
    /**
     * The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables)
     *
     * @default gray
     */
    basemap?: string | Basemap;
    /**
     * In authoring apps,the user may select a pre-defined size scheme. Pass the scheme object to this property to avoid getting onebased on the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables)
     */
    sizeScheme?: SizeScheme;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables)
     */
    valueExpressionTitle?: string;
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables)
     */
    sqlWhere?: string;
    /**
     * Only for polygon layers in 2D MapViews. Indicates whether  icon sizes should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables)
     *
     * @default false
     */
    sizeOptimizationEnabled?: boolean;
    /**
     * Provides options for setting a title to a field when an expression is providedinstead of a field name. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables)
     */
    legendOptions?: sizeCreateVisualVariablesParamsLegendOptions;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.If statistics for the field have already been generated, then pass the object here to avoid making a second statisticsquery to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * A custom minimum value set by the user. Use this in conjunction with `maxValue` togenerate statistics between lower and upper bounds. This will be the lowest stop in the returned size visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables)
     */
    minValue?: number;
    /**
     * A custom maximum value set by the user. Use this in conjunction with `minValue` togenerate statistics between lower and upper bounds. This will be the uppermost stop in the returned size visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables)
     */
    maxValue?: number;
    /**
     * When generating 3D symbols, a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) instanceis required. The relevant SceneView or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) is required when a `valueExpression` is specified.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * Indicates if the size units of the symbols will be in meters. This should be `true`when generating visualizations with 3D volumetric symbology. A `view` must be provided if this property is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables)
     */
    worldScale?: boolean;
    /**
     * When set to `all`, a single size variable that scales uniformly in alldimensions is generated. When set to `height`, the result contains two size visual variables:the first one sizes the height according to the field statistics, while the second defines a constant size forwidth and depth.**Possible Values:** all | height
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables)
     *
     * @default all
     */
    axis?: string;
  }

  export interface sizeCreateVisualVariablesParamsLegendOptions extends Object {
    /**
     * The title used to represent the given field or expression in the[Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables)
     */
    title?: string;
    /**
     * Indicates whether to describe the renderer in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables)
     */
    showLegend?: boolean;
  }

  /**
   * The result object of the [createVisualVariables()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createVisualVariables) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#VisualVariableResult)
   */
  export interface sizeVisualVariableResult extends Object {
    /**
     * An array of size visualvariables configured based on the statistics of the data and the view scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#VisualVariableResult)
     */
    visualVariables: SizeVariable[];
    /**
     * The size scheme used by the main visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#VisualVariableResult)
     */
    sizeScheme: SizeScheme;
    /**
     * Indicates whether default values were used in the absence of sufficientdata and/or statistics from the layer. Default values are typically used when all features have the same fieldvalue or no value at all.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#VisualVariableResult)
     */
    defaultValuesUsed: boolean;
    /**
     * Basic statistics returned from a query to the service for the given field or expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#VisualVariableResult)
     */
    statistics: SummaryStatisticsResult;
    /**
     * The ID of the basemap used to determine the optimal fill color of the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#VisualVariableResult)
     */
    basemapId: string;
    /**
     * Authoring information related to thecreation of the visual variable. This includes information related to UI inputs from sliders and selected themes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#VisualVariableResult)
     */
    authoringInfo: AuthoringInfo;
  }

  interface type {
    /**
     * Generates a [PointCloudUniqueValueRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html) based ona given field of a [PointCloudLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html). This renderer visualizespoints of the same type, usually from the `CLASS_CODE` field or an equivalent field that storesinformation related to the classification of the data (e.g. low vegetation, high vegetation, ground, etc.).The generated renderer visualizes each point with a standard predefined color matching the class code of the point.All that's required isa layer instance and field name. You can optionally set the size and densityof the points to suit the needs of the desired visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createPCClassRenderer)
     *
     * @param params Input parameters for generating a renderer based on the given  field of the input layer. See the table below for details of each parameter.
     * @param params.layer The layer for which the visualization  is generated.
     * @param params.field The name of the field containing classification data for the given layer.  A common field name used for this renderer type is `CLASS_CODE`, though other fields can be used.
     * @param params.size The size of each point expressed as a percentage. This value will determine point sizesscaled based on the given `density` of points. When the value is `100%`, the sizeof each point is set so that it minimizes the number of gaps between neighboring points. Any value above `100%`will allow for points to overlap neighboring points scaled to the given value. Values below `100%` scale pointsizes smaller so there appear to be more gaps between points.
     * @param params.density The number of points per inch in the view.
     * @param params.typeScheme In authoring apps,the user may select a pre-defined type scheme. Pass the scheme object to this property to avoid getting onebased on the `basemap`.
     * @param params.statistics A statistics object generated from the [uniqueValues](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-uniqueValues.html) function.If statistics for the field have already been generated, then pass the object here to avoid making a second statisticsquery to the server.
     *
     */
    createPCClassRenderer(params: typeCreatePCClassRendererParams): IPromise<PCClassRendererResult>;
    /**
     * Generates a [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html) that may be applied directly to a[Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) that supports renderers. Therenderer contains unique symbols representing a string or a numeric value returnedfrom the indicated field.In most cases you will provide a `layer`, `basemap`, and `field` to generate this renderer.This is a scenario in whichthe values of the field aren't well known and the user doesn't know which colorsto use in the visualization. You can also use a `valueExpression` instead of a `field` to visualizefeatures based on a value returned from a script executed at runtime.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createRenderer)
     *
     * @param params Input parameters for generating symbols to represent unique types based on datareturned from a given field. See the table below for details of each parameter.
     * @param params.layer The layer for which the rendereris generated.
     * @param params.field The name of the field from which to extract unique values that will be used forthe basis of the data-driven visualization.  This property is ignored if a `valueExpression` is used.
     * @param params.basemap The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     * @param params.numTypes The number of types (or categories) displayed by the renderer.Use `-1` to display all returned types.
     * @param params.sortBy Indicates how values should be sorted in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).See the table below for information about values that may be passed to this parameter.Possible Value | Description---------------|------------count | Unique values/types will be sorted from highest to lowest based on the count of features that fall in each category.value | Unique values/types will be sorted in alphabetical order.**Possible Values:** count | value
     * @param params.typeScheme In authoring apps,the user may select a pre-defined type scheme. Pass the scheme object to this property to avoid getting onebased on the `basemap`.
     * @param params.valueExpression An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a numberor a string.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     * @param params.valueExpressionTitle Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     * @param params.outlineOptimizationEnabled For polygon layers only. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     * @param params.legendOptions Provides options for setting a title to a field that will override the fieldalias defined in the service. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     * @param params.defaultSymbolEnabled Enables the `defaultSymbol` on the renderer and assigns it to featureswith no value.
     * @param params.view The view instance in which the visualization will be rendered.A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) is required if `symbolType = "3d-volumetric"` or `3d-volumetric-uniform`.The relevant SceneView or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) is required when a `valueExpression` is specified.
     * @param params.symbolType The type of symbol to generate. This depends on the viewin which you are working and the desired visualization. This parameter can be ignored for layerswith a `mesh` geometry type. Possible values are described below.| Value | Description || ----- | ----------- || 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). || 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). || 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) and only the symbol's height should be variable, for example with cylinders. A SceneView instance must be provided to the `view` parameter if this option is used. || 3d-volumetric-uniform | Generates a visualization using uniformly-sized 3D symbols with volumetric symbol layers. Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) and the symbol should be sized uniformly, for example with spheres. A SceneView instance must be provided to the `view` parameter if this option is used. |
     * @param params.statistics A statistics object generated from the [uniqueValues](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-uniqueValues.html) function.If statistics for the field have already been generated, then pass the object here to avoid making a second statisticsquery to the server.
     * @param params.colorMixMode **This option only applies to generating renderers for mesh SceneLayers**.Specifies how the symbol's color is applied to the geometry color/texture. See the documentation in[FillSymbol3DLayer.material](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material) for more context.See the table below for possible values.Value | Description------|------------tint | Applies the symbol `color` to the desaturated geometry/texture color.replace | Removes the geometry/texture color and applies the symbol `color`.multiply | Multiplies geometry/texture color value with the symbol `color` value. The result is a darker color. Multiplying with white keeps the geometry color the same.
     *
     */
    createRenderer(params: typeCreateRendererParams): IPromise<typeRendererResult>;
  }

  export const type: type;

  /**
   * The result object of the [createPCClassRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createPCClassRenderer) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#PCClassRendererResult)
   */
  export interface PCClassRendererResult extends Object {
    /**
     * The renderer object configured torepresent the class codes in the point cloud. Set this object on the input layer's `renderer` property toupdate its visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#PCClassRendererResult)
     */
    renderer: PointCloudUniqueValueRenderer;
  }

  /**
   * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createRenderer) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#RendererResult)
   */
  export interface typeRendererResult extends Object {
    /**
     * The renderer object configured to bestmatch the given basemap. Set this on a layer's `renderer` property toupdate its visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#RendererResult)
     */
    renderer: UniqueValueRenderer;
    /**
     * An array of objects describing the value, symbol, and count ofeach unique type or category represented in the renderer. See the table below describing each property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#RendererResult)
     */
    uniqueValueInfos: typeUniqueValueInfo[];
    /**
     * An array of objects describing the values or categoriesexcluded from consideration in visualizing data from the given field. The specification of each object matchesthat of the objects specified in the `uniqueValueInfos` property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#RendererResult)
     */
    excludedUniqueValueInfos: any[];
    /**
     * The scheme used torepresent each category within the `uniqueValueInfos`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#RendererResult)
     */
    typeScheme: TypeScheme;
    /**
     * The ID of the basemap used to determine the optimal color scheme to represent thecategorical variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#RendererResult)
     */
    basemapId: string;
  }

  export interface typeCreatePCClassRendererParams extends Object {
    /**
     * The layer for which the visualization  is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createPCClassRenderer)
     */
    layer: PointCloudLayer;
    /**
     * The name of the field containing classification data for the given layer.  A common field name used for this renderer type is `CLASS_CODE`, though other fields can be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createPCClassRenderer)
     */
    field: string;
    /**
     * The size of each point expressed as a percentage. This value will determine point sizesscaled based on the given `density` of points. When the value is `100%`, the sizeof each point is set so that it minimizes the number of gaps between neighboring points. Any value above `100%`will allow for points to overlap neighboring points scaled to the given value. Values below `100%` scale pointsizes smaller so there appear to be more gaps between points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createPCClassRenderer)
     *
     * @default 100%
     */
    size?: string;
    /**
     * The number of points per inch in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createPCClassRenderer)
     *
     * @default 25
     */
    density?: number;
    /**
     * In authoring apps,the user may select a pre-defined type scheme. Pass the scheme object to this property to avoid getting onebased on the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createPCClassRenderer)
     */
    typeScheme?: TypeSchemeForPoint;
    /**
     * A statistics object generated from the [uniqueValues](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-uniqueValues.html) function.If statistics for the field have already been generated, then pass the object here to avoid making a second statisticsquery to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createPCClassRenderer)
     */
    statistics?: UniqueValuesResult;
  }

  export interface typeCreateRendererParams extends Object {
    /**
     * The layer for which the rendereris generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer;
    /**
     * The name of the field from which to extract unique values that will be used forthe basis of the data-driven visualization.  This property is ignored if a `valueExpression` is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createRenderer)
     */
    field?: string;
    /**
     * The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createRenderer)
     *
     * @default gray
     */
    basemap?: string | Basemap;
    /**
     * The number of types (or categories) displayed by the renderer.Use `-1` to display all returned types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createRenderer)
     *
     * @default 10
     */
    numTypes?: number;
    /**
     * Indicates how values should be sorted in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).See the table below for information about values that may be passed to this parameter.Possible Value | Description---------------|------------count | Unique values/types will be sorted from highest to lowest based on the count of features that fall in each category.value | Unique values/types will be sorted in alphabetical order.**Possible Values:** count | value
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createRenderer)
     *
     * @default count
     */
    sortBy?: string;
    /**
     * In authoring apps,the user may select a pre-defined type scheme. Pass the scheme object to this property to avoid getting onebased on the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createRenderer)
     */
    typeScheme?: TypeScheme;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a numberor a string.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createRenderer)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createRenderer)
     */
    valueExpressionTitle?: string;
    /**
     * For polygon layers only. Indicates whether the  polygon outline width should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createRenderer)
     *
     * @default false
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * Provides options for setting a title to a field that will override the fieldalias defined in the service. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createRenderer)
     */
    legendOptions?: typeCreateRendererParamsLegendOptions;
    /**
     * Enables the `defaultSymbol` on the renderer and assigns it to featureswith no value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createRenderer)
     */
    defaultSymbolEnabled?: boolean;
    /**
     * The view instance in which the visualization will be rendered.A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) is required if `symbolType = "3d-volumetric"` or `3d-volumetric-uniform`.The relevant SceneView or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) is required when a `valueExpression` is specified.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * The type of symbol to generate. This depends on the viewin which you are working and the desired visualization. This parameter can be ignored for layerswith a `mesh` geometry type. Possible values are described below.| Value | Description || ----- | ----------- || 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). || 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). || 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) and only the symbol's height should be variable, for example with cylinders. A SceneView instance must be provided to the `view` parameter if this option is used. || 3d-volumetric-uniform | Generates a visualization using uniformly-sized 3D symbols with volumetric symbol layers. Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) and the symbol should be sized uniformly, for example with spheres. A SceneView instance must be provided to the `view` parameter if this option is used. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createRenderer)
     *
     * @default 2d
     */
    symbolType?: string;
    /**
     * A statistics object generated from the [uniqueValues](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-uniqueValues.html) function.If statistics for the field have already been generated, then pass the object here to avoid making a second statisticsquery to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createRenderer)
     */
    statistics?: UniqueValuesResult;
    /**
     * **This option only applies to generating renderers for mesh SceneLayers**.Specifies how the symbol's color is applied to the geometry color/texture. See the documentation in[FillSymbol3DLayer.material](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material) for more context.See the table below for possible values.Value | Description------|------------tint | Applies the symbol `color` to the desaturated geometry/texture color.replace | Removes the geometry/texture color and applies the symbol `color`.multiply | Multiplies geometry/texture color value with the symbol `color` value. The result is a darker color. Multiplying with white keeps the geometry color the same.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createRenderer)
     *
     * @default replace
     */
    colorMixMode?: string;
  }

  export interface typeCreateRendererParamsLegendOptions extends Object {
    /**
     * The title used to represent the given field in the[Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createRenderer)
     */
    title: string;
  }

  /**
   * Describes the symbol, label, and value of a unique value generated by the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#createRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#UniqueValueInfo)
   */
  export interface typeUniqueValueInfo extends Object {
    /**
     * A unique value representing a type or category of features in a layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#UniqueValueInfo)
     */
    value: string | number;
    /**
     * The number of features with the given `value` (or belonging  to the given category).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#UniqueValueInfo)
     */
    count: number;
    /**
     * The label describing the value or category in the  [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#UniqueValueInfo)
     */
    label: string;
    /**
     * The symbol used to represent features belonging to the  given category.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-type.html#UniqueValueInfo)
     */
    symbol: Symbol;
  }

  interface univariateColorSize {
    /**
     * Generates a [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html) that may be applied directly to a[Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html). Therenderer contains continuous color and size visual variables that map symbols withoptimal colors and sizes based on the indicated basemapto specific stop values based on queried statistics from the indicated field or expression.In most cases you will provide a `layer`, `basemap`, `field`, and `theme` to generate this renderer.This is a scenario in whichthe statistics of the data aren't well known and the user doesn't know what colors and sizesto use in the visualization. You can also use a `valueExpression` instead of a `field` to visualizefeatures based on a value returned from a script executed at runtime.The other options are provided for convenience for more involved custom visualization authoringapplications. For example, if you already generated statistics in another operation, youcan pass the statistics object to the `statistics` parameter to avoid making an extra call to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     *
     * @param params See the table below for details of each parameter that may be passed to this method.
     * @param params.layer The layer for which the visual variableis generated.
     * @param params.basemap The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     * @param params.field The name of the field whose data will be queried for statistics and used forthe basis of the data-driven visualization.  This property is ignored if a `valueExpression` is used.
     * @param params.normalizationField The name of the field to normalize the values of the given`field`. Providing a normalization field helps minimize some visualization errors and standardizes the dataso all features are visualized with minimal bias due to area differences or count variation. This option iscommonly used when visualizing densities.
     * @param params.valueExpression An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     * @param params.valueExpressionTitle Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     * @param params.sqlExpression A SQL expression evaluating to a number.
     * @param params.sqlWhere A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     * @param params.sizeOptimizationEnabled Only for polygon layers in 2D MapViews. Indicates whether  icon sizes should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     * @param params.statistics A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.If statistics for the field have already been generated, then pass the object here to avoid making a second statisticsquery to the server.
     * @param params.minValue A custom minimum value set by the user. Use this in conjunction with `maxValue` togenerate statistics between lower and upper bounds. This will be the lowest stop in the returned visual variables.
     * @param params.maxValue A custom maximum value set by the user. Use this in conjunction with `minValue` togenerate statistics between lower and upper bounds. This will be the uppermost stop in the returned visual variables.
     * @param params.defaultSymbolEnabled Enables the `defaultSymbol` on the renderer and assigns it to featureswith no value and features that do not fall within the configured data range.
     * @param params.colorOptions Options for configuring the color portion of the visualization.
     * @param params.sizeOptions Options for configuring the size portion of the visualization.
     * @param params.view The view instance in which the visualization will be rendered.A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) is required if `symbolType = "3d-volumetric"` or `3d-volumetric-uniform`.The relevant SceneView or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) is required when a `valueExpression` is specified.
     * @param params.symbolType The type of symbol to generate. This depends on the viewin which you are working and the desired visualization. Possible values are described below.| Value | Description || ----- | ----------- || 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). || 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). || 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) and only the symbol's height should be variable, for example with cylinders. A SceneView instance must be provided to the `view` parameter if this option is used. || 3d-volumetric-uniform | Generates a visualization using uniformly sized 3D symbols with volumetric symbol layers. Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) and the symbol should be sizes uniformly, for example with spheres. A SceneView instance must be provided to the `view` parameter if this option is used. |
     *
     */
    createContinuousRenderer(
      params: univariateColorSizeCreateContinuousRendererParams
    ): IPromise<univariateColorSizeContinuousRendererResult>;
    /**
     * This method generates color and size visual variables, both based on the same given field or expression.These visual variables are generated with default stops that are optimally chosen based on the statisticsqueried for the indicated field or expression and colors based on the input basemap.There are two different ways this method may be called. The most common case is byproviding a `layer`, `basemap`, and `field`. This is the scenario wherethe statistics of the data aren't well known and the user doesn't know what colorsto use. You can optionally use a `valueExpression` instead of a field to visualizefeatures based on a numeric value returned from a script executed at runtime.The other options are provided for convenience for more involved custom visualization authoringapplications. For example, if you already generated statistics in another operation, youcan pass the object in the `statistics` parameter to avoid making an extra call to the server.You can also provide a `colorScheme` and/or a `sizeScheme` if you don't want one picked for you.In this case the `basemap` and `theme` options would be ignored.The resulting array of visual variables will contain one color visual variable, and one or two size visual variablesdepending on the value of the `sizeOptions.axis` parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     *
     * @param params Input parameters for generating color and size visual variables based on datareturned from a given field or expression. See the table below for details of each parameter.
     * @param params.layer The layer for which the visual variableis generated.
     * @param params.basemap The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     * @param params.field The name of the field whose data will be queried for statistics and used forthe basis of the data-driven visualization.  This property is ignored if a `valueExpression` is used.
     * @param params.normalizationField The name of the field to normalize the values of the given`field`. Providing a normalization field helps minimize some visualization errors and standardizes the dataso all features are visualized with minimal bias due to area differences or count variation. This option iscommonly used when visualizing densities.
     * @param params.valueExpression An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     * @param params.valueExpressionTitle Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     * @param params.sqlExpression A SQL expression evaluating to a number.
     * @param params.sqlWhere A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     * @param params.statistics A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.If statistics for the field have already been generated, then pass the object here to avoid making a second statisticsquery to the server.
     * @param params.minValue A custom minimum value set by the user. Use this in conjunction with `maxValue` togenerate statistics between lower and upper bounds. This will be the lowest stop in the returned visual variables.
     * @param params.maxValue A custom maximum value set by the user. Use this in conjunction with `minValue` togenerate statistics between lower and upper bounds. This will be the uppermost stop in the returned visual variables.
     * @param params.colorOptions Options for configuring the color portion of the visualization.
     * @param params.sizeOptions Options for configuring the size portion of the visualization.
     * @param params.view When generating 3D symbols, a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) instanceis required. The relevant SceneView or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) is required when a `valueExpression` is specified.
     * @param params.worldScale Indicates if the size units of the symbols will be in meters. This should be `true`when generating visualizations with 3D volumetric symbology. A `view` must be provided if this property is set to `true`.
     *
     */
    createVisualVariables(params: univariateColorSizeCreateVisualVariablesParams): IPromise<VisualVariablesResult>;
  }

  export const univariateColorSize: univariateColorSize;

  /**
   * The result object of the [createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#ContinuousRendererResult)
   */
  export interface univariateColorSizeContinuousRendererResult extends Object {
    /**
     * The renderer object configured to bestmatch the given basemap and the spread of the data. Set this on a layer's `renderer` property toupdate its visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#ContinuousRendererResult)
     */
    renderer: ClassBreaksRenderer;
    /**
     * Object containing visual variable and scheme information forthe color portion of the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#ContinuousRendererResult)
     */
    color: ContinuousRendererResultColor;
    /**
     * Object containing visual variable and scheme information for thesize portion of the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#ContinuousRendererResult)
     */
    size: ContinuousRendererResultSize;
    /**
     * Indicates whether default values were used inthe absence of sufficient data and/or statistics from the layer. Default values aretypically used when all features have the same field value or no value at all.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#ContinuousRendererResult)
     */
    defaultValuesUsed: boolean;
    /**
     * Basic statistics returned from a query to the service for the given field or expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#ContinuousRendererResult)
     */
    statistics: SummaryStatisticsResult;
    /**
     * The ID of the basemap used to determine the optimal fill color of the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#ContinuousRendererResult)
     */
    basemapId: string;
  }

  export interface univariateColorSizeCreateContinuousRendererParams extends Object {
    /**
     * The layer for which the visual variableis generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer;
    /**
     * The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     *
     * @default gray
     */
    basemap?: string | Basemap;
    /**
     * The name of the field whose data will be queried for statistics and used forthe basis of the data-driven visualization.  This property is ignored if a `valueExpression` is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    field?: string;
    /**
     * The name of the field to normalize the values of the given`field`. Providing a normalization field helps minimize some visualization errors and standardizes the dataso all features are visualized with minimal bias due to area differences or count variation. This option iscommonly used when visualizing densities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    normalizationField?: string;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    valueExpressionTitle?: string;
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    sqlWhere?: string;
    /**
     * Only for polygon layers in 2D MapViews. Indicates whether  icon sizes should vary based on view scale. When set, a valid [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  instance must be provided in the `view` parameter. This option is not supported for 3D  [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     *
     * @default false
     */
    sizeOptimizationEnabled?: boolean;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.If statistics for the field have already been generated, then pass the object here to avoid making a second statisticsquery to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * A custom minimum value set by the user. Use this in conjunction with `maxValue` togenerate statistics between lower and upper bounds. This will be the lowest stop in the returned visual variables.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    minValue?: number;
    /**
     * A custom maximum value set by the user. Use this in conjunction with `minValue` togenerate statistics between lower and upper bounds. This will be the uppermost stop in the returned visual variables.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    maxValue?: number;
    /**
     * Enables the `defaultSymbol` on the renderer and assigns it to featureswith no value and features that do not fall within the configured data range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    defaultSymbolEnabled?: boolean;
    /**
     * Options for configuring the color portion of the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    colorOptions?: univariateColorSizeCreateContinuousRendererParamsColorOptions;
    /**
     * Options for configuring the size portion of the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    sizeOptions?: univariateColorSizeCreateContinuousRendererParamsSizeOptions;
    /**
     * The view instance in which the visualization will be rendered.A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) is required if `symbolType = "3d-volumetric"` or `3d-volumetric-uniform`.The relevant SceneView or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) is required when a `valueExpression` is specified.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * The type of symbol to generate. This depends on the viewin which you are working and the desired visualization. Possible values are described below.| Value | Description || ----- | ----------- || 2d | Generates a visualization using 2D symbols such as [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html), [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html), or [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html). Use this option if generating a visualization for data in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). || 3d-flat | Generates a visualization using 3D symbols with flat symbol layers such as [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html), [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html). Use this option if generating a 2D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). || 3d-volumetric | Generates a visualization using 3D symbols with volumetric symbol layers such as [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html), or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html). Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) and only the symbol's height should be variable, for example with cylinders. A SceneView instance must be provided to the `view` parameter if this option is used. || 3d-volumetric-uniform | Generates a visualization using uniformly sized 3D symbols with volumetric symbol layers. Use this option if generating a 3D visualization for data in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) and the symbol should be sizes uniformly, for example with spheres. A SceneView instance must be provided to the `view` parameter if this option is used. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     *
     * @default 2d
     */
    symbolType?: string;
  }

  export interface univariateColorSizeCreateContinuousRendererParamsColorOptions extends Object {
    /**
     * Determines which values will be emphasized in the continuous ramp and the map.Possible values are listed below.| Value | Description | Example || ----- | ----------- | ------- || high-to-low | High values are emphasized with strong colors. | ![high-to-low](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-high-to-low.png) || above-and-below | Values centered around a given point (e.g. the average) are visualized with weak colors while other values are emphasized with strong colors. | ![above-and-below](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-above-and-below.png) || centered-on | Values centered around a given point (e.g. the average) are emphasized with strong colors while other values are visualized with weak colors. | ![centered-on](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-centered-on.png) || extremes | High and low values are emphasized with strong colors. All others are visualized with weak colors. | ![extremes](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-extremes.png) |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    theme?: string;
    /**
     * In authoring apps,the user may select a pre-defined color scheme. Pass the scheme object to this property to avoid getting onebased on a `theme` and the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    colorScheme?: ColorScheme;
    /**
     * Provides options for setting a title to a field when an expression is providedinstead of a field name. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    legendOptions?: univariateColorSizeCreateContinuousRendererParamsColorOptionsLegendOptions;
  }

  export interface univariateColorSizeCreateContinuousRendererParamsColorOptionsLegendOptions extends Object {
    /**
     * The title used to represent the given field or expression in the[Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    title: string;
  }

  export interface univariateColorSizeCreateContinuousRendererParamsSizeOptions extends Object {
    /**
     * In authoring apps,the user may select a pre-defined size scheme. Pass the scheme object to this property to avoid getting onebased on the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    sizeScheme?: SizeScheme;
    /**
     * Provides options for setting a title to a field when an expression is providedinstead of a field name. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    legendOptions?: univariateColorSizeCreateContinuousRendererParamsSizeOptionsLegendOptions;
  }

  export interface univariateColorSizeCreateContinuousRendererParamsSizeOptionsLegendOptions extends Object {
    /**
     * The title used to represent the given field or expression in the[Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)
     */
    title: string;
  }

  export interface univariateColorSizeCreateVisualVariablesParams extends Object {
    /**
     * The layer for which the visual variableis generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer;
    /**
     * The [named string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) or basemap object of the Esri basemapthat will be paired with the output visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     *
     * @default gray
     */
    basemap?: string | Basemap;
    /**
     * The name of the field whose data will be queried for statistics and used forthe basis of the data-driven visualization.  This property is ignored if a `valueExpression` is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    field?: string;
    /**
     * The name of the field to normalize the values of the given`field`. Providing a normalization field helps minimize some visualization errors and standardizes the dataso all features are visualized with minimal bias due to area differences or count variation. This option iscommonly used when visualizing densities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    normalizationField?: string;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.This is used by the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    valueExpressionTitle?: string;
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    sqlWhere?: string;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.If statistics for the field have already been generated, then pass the object here to avoid making a second statisticsquery to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * A custom minimum value set by the user. Use this in conjunction with `maxValue` togenerate statistics between lower and upper bounds. This will be the lowest stop in the returned visual variables.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    minValue?: number;
    /**
     * A custom maximum value set by the user. Use this in conjunction with `minValue` togenerate statistics between lower and upper bounds. This will be the uppermost stop in the returned visual variables.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    maxValue?: number;
    /**
     * Options for configuring the color portion of the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    colorOptions?: univariateColorSizeCreateVisualVariablesParamsColorOptions;
    /**
     * Options for configuring the size portion of the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    sizeOptions?: univariateColorSizeCreateVisualVariablesParamsSizeOptions;
    /**
     * When generating 3D symbols, a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) instanceis required. The relevant SceneView or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) is required when a `valueExpression` is specified.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * Indicates if the size units of the symbols will be in meters. This should be `true`when generating visualizations with 3D volumetric symbology. A `view` must be provided if this property is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    worldScale?: boolean;
  }

  export interface univariateColorSizeCreateVisualVariablesParamsColorOptions extends Object {
    /**
     * Determines which values will be emphasized in the continuous ramp and the map.Possible values are listed below.| Value | Description | Example || ----- | ----------- | ------- || high-to-low | High values are emphasized with strong colors. | ![high-to-low](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-high-to-low.png) || above-and-below | Values centered around a given point (e.g. the average) are visualized with weak colors while other values are emphasized with strong colors. | ![above-and-below](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-above-and-below.png) || centered-on | Values centered around a given point (e.g. the average) are emphasized with strong colors while other values are visualized with weak colors. | ![centered-on](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-centered-on.png) || extremes | High and low values are emphasized with strong colors. All others are visualized with weak colors. | ![extremes](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-extremes.png) |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    theme?: string;
    /**
     * In authoring apps,the user may select a pre-defined color scheme. Pass the scheme object to this property to avoid getting onebased on a `theme` and the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    colorScheme?: ColorScheme;
    /**
     * Provides options for setting a title to a field when an expression is providedinstead of a field name. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    legendOptions?: univariateColorSizeCreateVisualVariablesParamsColorOptionsLegendOptions;
  }

  export interface univariateColorSizeCreateVisualVariablesParamsColorOptionsLegendOptions extends Object {
    /**
     * The title used to represent the given field or expression in the[Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    title: string;
  }

  export interface univariateColorSizeCreateVisualVariablesParamsSizeOptions extends Object {
    /**
     * When set to `all`, a single size variable that scales uniformly in alldimensions is generated. When set to `height`, the result contains two size visual variables:the first one sizes the height according to the field statistics, while the second defines a constant size forwidth and depth.**Possible Values:** all | height
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     *
     * @default all
     */
    axis?: boolean;
    /**
     * In authoring apps,the user may select a pre-defined size scheme. Pass the scheme object to this property to avoid getting onebased on the `basemap`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    sizeScheme?: SizeScheme;
    /**
     * Provides options for setting a title to a field when an expression is providedinstead of a field name. This title will represent the field in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    legendOptions?: univariateColorSizeCreateVisualVariablesParamsSizeOptionsLegendOptions;
  }

  export interface univariateColorSizeCreateVisualVariablesParamsSizeOptionsLegendOptions extends Object {
    /**
     * The title used to represent the given field or expression in the[Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables)
     */
    title: string;
  }

  /**
   * The result object of the [createVisualVariables()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createVisualVariables) method. See the tablebelow for details of each property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#VisualVariablesResult)
   */
  export interface VisualVariablesResult extends Object {
    /**
     * Object containing visual variable and scheme information forthe color portion of the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#VisualVariablesResult)
     */
    color: VisualVariablesResultColor;
    /**
     * Object containing visual variable and scheme information for thesize portion of the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#VisualVariablesResult)
     */
    size: VisualVariablesResultSize;
    /**
     * Indicates whether default values were used inthe absence of sufficient data and/or statistics from the layer. Default values aretypically used when all features have the same field value or no value at all.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#VisualVariablesResult)
     */
    defaultValuesUsed: boolean;
    /**
     * Basic statistics returned from a query to the service for the given field or expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#VisualVariablesResult)
     */
    statistics: SummaryStatisticsResult;
    /**
     * The ID of the basemap used to determine the optimal fill color of the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#VisualVariablesResult)
     */
    basemapId: string;
    /**
     * Authoring information related to thecreation of the visual variables. This includes inforamation related to UI inputs from sliders and selected themes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#VisualVariablesResult)
     */
    authoringInfo: AuthoringInfo;
  }

  export interface ContinuousRendererResultColor extends Object {
    /**
     * A color visualvariable configured based on the statistics of the data and the given basemap and scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#ContinuousRendererResult)
     */
    visualVariable: ColorVariable;
    /**
     * The color scheme used by the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#ContinuousRendererResult)
     */
    colorScheme: ColorScheme;
  }

  export interface ContinuousRendererResultSize extends Object {
    /**
     * The size visualvariable(s) configured based on the statistics of the data and the view scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#ContinuousRendererResult)
     */
    visualVariables: SizeVariable[];
    /**
     * The size scheme used by the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#ContinuousRendererResult)
     */
    sizeScheme: SizeScheme;
  }

  export interface VisualVariablesResultColor extends Object {
    /**
     * A color visualvariable configured based on the statistics of the data and the given basemap and scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#VisualVariablesResult)
     */
    visualVariable: ColorVariable;
    /**
     * The color scheme used by the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#VisualVariablesResult)
     */
    colorScheme: ColorScheme;
  }

  export interface VisualVariablesResultSize extends Object {
    /**
     * The size visualvariable(s) configured based on the statistics of the data and the view scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#VisualVariablesResult)
     */
    visualVariables: SizeVariable[];
    /**
     * The size scheme used by the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#VisualVariablesResult)
     */
    sizeScheme: SizeScheme;
  }

  interface scaleRange {
    /**
     * Generates a suggested scale range (i.e. [minScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#minScale)and [maxScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#maxScale)) to apply to the input `layer`. Thesevalues suggest the best scale range for viewing the input layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-heuristics-scaleRange.html#scaleRange)
     *
     * @param params See the table below for details about parameters that may be passed to this function.
     * @param params.layer The layer for which to generate a suggested min/max scale range.
     * @param params.view The [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  where the layer will be rendered.
     * @param params.sampleSize The number of features in the `layer` to sample for spatial  statistics. A higher sample size will yield more precise results. However, higher sample sizes also  require more time for the function to process the result.
     *
     */
    scaleRange(params: scaleRangeScaleRangeParams): IPromise<ScaleRangeResult>;
  }

  export const scaleRange: scaleRange;

  /**
   * Suggested `min` and `max` scales to apply to the input layer for the [scaleRange()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-heuristics-scaleRange.html#scaleRange)function.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-heuristics-scaleRange.html#ScaleRangeResult)
   */
  export interface ScaleRangeResult extends Object {
    /**
     * The suggested [minScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#minScale)  to apply to the input layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-heuristics-scaleRange.html#ScaleRangeResult)
     */
    minScale: number;
    /**
     * The suggested [maxScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#maxScale)  to apply to the input layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-heuristics-scaleRange.html#ScaleRangeResult)
     */
    maxScale: number;
  }

  export interface scaleRangeScaleRangeParams extends Object {
    /**
     * The layer for which to generate a suggested min/max scale range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-heuristics-scaleRange.html#scaleRange)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | PointCloudLayer | GeoJSONLayer;
    /**
     * The [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  where the layer will be rendered.
     *
     * [Read more...](global.html)
     */
    view: View;
    /**
     * The number of features in the `layer` to sample for spatial  statistics. A higher sample size will yield more precise results. However, higher sample sizes also  require more time for the function to process the result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-heuristics-scaleRange.html#scaleRange)
     *
     * @default 500
     */
    sampleSize?: number;
  }

  interface sizeRange {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-heuristics-sizeRange.html#sizeRange)
     *
     * @param params See the table below for details about parameters that may be passed to this function.
     * @param params.layer The `polygon` layer for which to generate a suggested min/max size range based on scale for a size visual variable.
     * @param params.view The [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  where the layer will be rendered.
     *
     */
    sizeRange(params: sizeRangeSizeRangeParams): IPromise<SizeRangeResult>;
  }

  export const sizeRange: sizeRange;

  /**
   * The suggested `minSize` and `maxSize`[size stops](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentStops)generated from the [sizeRange()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-heuristics-sizeRange.html#sizeRange) function to apply to the[scale-dependent size visual variable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentIcons).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-heuristics-sizeRange.html#SizeRangeResult)
   */
  export interface SizeRangeResult extends Object {
    /**
     * The suggested sizes of the smallest icons at various scales in a layer with a  [size visualization](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-heuristics-sizeRange.html#SizeRangeResult)
     */
    minSize: ScaleDependentStops;
    /**
     * The suggested sizes of the largest icons at various scales in a layer with a  [size visualization](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-heuristics-sizeRange.html#SizeRangeResult)
     */
    maxSize: ScaleDependentStops;
  }

  export interface sizeRangeSizeRangeParams extends Object {
    /**
     * The `polygon` layer for which to generate a suggested min/max size range based on scale for a size visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-heuristics-sizeRange.html#sizeRange)
     */
    layer: FeatureLayer | GeoJSONLayer;
    /**
     * The [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)  where the layer will be rendered.
     *
     * [Read more...](global.html)
     */
    view: MapView;
  }

  interface classBreaks {
    /**
     * Generates class breaks for an input field (or expression) of a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) basedon a given classification method and normalization type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#classBreaks)
     *
     * @param params See the table below for details about parameters that may be passed to this function.
     * @param params.layer The layer from which to generate class breaks.
     * @param params.field The class breaks will be generated based on values of this field.If a field is provided, the values from the given field from all featureswill be queried in the service.
     * @param params.normalizationField The field by which to normalize the values returned from the given `field`.
     * @param params.classificationMethod The method for classifying the data. See the table belowfor a list of possible values.  | Possible Value | Description ||---------------|------------ || natural-breaks | Data values that cluster are placed into a single class. Class breaks occur where gaps exist between clusters. You should use this method if your data is unevenly distributed; that is, many features have the same or similar values and there are gaps between groups of values. || equal-interval | Each class has an equal range of values; in other words, the difference between the high and low value is equal for each class. You should use this method if your data is evenly distributed and you want to emphasize the difference in values between the features. || quantile | Each class has roughly the same number of features. If your data is evenly distributed and you want to emphasize the difference in relative position between features, you should use the quantile classification method. If, for example, the point values are divided into five classes, points in the highest class would fall into the top fifth of all points.  || standard-deviation | Class breaks are placed above and below the mean value at intervals of `1`, `0.5`, or `0.25` standard deviations until all the data values are included in a class.  |
     * @param params.standardDeviationInterval When `classificationMethod = "standard-deviation"`, thissets the interval at which each class break should be set (e.g. `0.25`, `0.33`, `0.5`, `1`).
     * @param params.minValue The minimum bounding value for the class breaks definition.Use this in conjunction with `maxValue` to generate class breaks between lower and upper bounds.
     * @param params.maxValue The maximum bounding value for the class breaks definition. Use thisin conjunction with `minValue` to generate class breaks between lower and upper bounds.
     * @param params.numClasses Indicates the number of classes to generate for the class breaks definition.
     * @param params.valueExpression An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     * @param params.sqlExpression A SQL expression evaluating to a number.
     * @param params.sqlWhere A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     * @param params.view A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) instance isrequired when a `valueExpression` is specified.
     * @param params.features A subset of features for which to generate the class breaks.
     *
     */
    classBreaks(params: classBreaksClassBreaksParams): IPromise<ClassBreaksResult>;
  }

  const __classBreaksMapped: classBreaks;
  export const classBreaks: typeof __classBreaksMapped.classBreaks;

  /**
   * An object describing a single class break generated from the [classBreaks()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#classBreaks) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#ClassBreak)
   */
  export interface ClassBreak extends Object {
    /**
     * The label describing the given class break  for use in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#ClassBreak)
     */
    label: string;
    /**
     * The lower bound of the class break.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#ClassBreak)
     */
    minValue: number;
    /**
     * The upper bound of the class break.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#ClassBreak)
     */
    maxValue: number;
  }

  export interface classBreaksClassBreaksParams extends Object {
    /**
     * The layer from which to generate class breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | PointCloudLayer | GeoJSONLayer;
    /**
     * The class breaks will be generated based on values of this field.If a field is provided, the values from the given field from all featureswill be queried in the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    field?: string;
    /**
     * The field by which to normalize the values returned from the given `field`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    normalizationField?: string;
    /**
     * The method for classifying the data. See the table belowfor a list of possible values.  | Possible Value | Description ||---------------|------------ || natural-breaks | Data values that cluster are placed into a single class. Class breaks occur where gaps exist between clusters. You should use this method if your data is unevenly distributed; that is, many features have the same or similar values and there are gaps between groups of values. || equal-interval | Each class has an equal range of values; in other words, the difference between the high and low value is equal for each class. You should use this method if your data is evenly distributed and you want to emphasize the difference in values between the features. || quantile | Each class has roughly the same number of features. If your data is evenly distributed and you want to emphasize the difference in relative position between features, you should use the quantile classification method. If, for example, the point values are divided into five classes, points in the highest class would fall into the top fifth of all points.  || standard-deviation | Class breaks are placed above and below the mean value at intervals of `1`, `0.5`, or `0.25` standard deviations until all the data values are included in a class.  |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    classificationMethod?: string;
    /**
     * When `classificationMethod = "standard-deviation"`, thissets the interval at which each class break should be set (e.g. `0.25`, `0.33`, `0.5`, `1`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    standardDeviationInterval?: number;
    /**
     * The minimum bounding value for the class breaks definition.Use this in conjunction with `maxValue` to generate class breaks between lower and upper bounds.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    minValue?: number;
    /**
     * The maximum bounding value for the class breaks definition. Use thisin conjunction with `minValue` to generate class breaks between lower and upper bounds.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    maxValue?: number;
    /**
     * Indicates the number of classes to generate for the class breaks definition.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    numClasses?: number;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    valueExpression?: string;
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    sqlWhere?: string;
    /**
     * A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) instance isrequired when a `valueExpression` is specified.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * A subset of features for which to generate the class breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    features?: Graphic[];
  }

  /**
   * Object returned from the [classBreaks()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#classBreaks) method. This object describes classesgenerated from data in a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) for a given field with aspecified classification method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#ClassBreaksResult)
   */
  export interface ClassBreaksResult extends Object {
    /**
     * An array of objects describing the class breaks generated from the [classBreaks()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#classBreaks) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#ClassBreaksResult)
     */
    classBreakInfos: ClassBreak[];
    /**
     * The minimum value of features in the dataset. This will be the lower  bound of the lowest class break.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#ClassBreaksResult)
     */
    minValue: number;
    /**
     * The maximum value of features in the dataset. This will be the upper  bound of the highest class break.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#ClassBreaksResult)
     */
    maxValue: number;
    /**
     * The normalization total if `normalizationType` is set to `percent-of-total`  when generating class breaks with [createClassBreaksRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-classBreaks.html#ClassBreaksResult)
     */
    normalizationTotal: number;
  }

  interface heatmapStatistics {
    /**
     * Returns an object containing various statistics describing the intensity valuesfor a heatmap visualization of a given point [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-heatmapStatistics.html#heatmapStatistics)
     *
     * @param params See the table below for details of each parameter.
     * @param params.layer The layer from which to generate statistics for the pixel intensity values and a given `field` if provided.
     * @param params.view A [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) instance used to calculate  pixel intensity values based on the features in the current view.
     * @param params.field The name of the numeric field for which the statistics will be generated.
     * @param params.blurRadius The area of influence for each point as a radius in pixels from the point.
     * @param params.features A subset of features for which to calculate the statistics.
     *
     */
    heatmapStatistics(params: heatmapStatisticsHeatmapStatisticsParams): IPromise<HeatmapStatisticsResult>;
  }

  export const heatmapStatistics: heatmapStatistics;

  export interface heatmapStatisticsHeatmapStatisticsParams extends Object {
    /**
     * The layer from which to generate statistics for the pixel intensity values and a given `field` if provided.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-heatmapStatistics.html#heatmapStatistics)
     */
    layer: FeatureLayer | CSVLayer | GeoJSONLayer;
    /**
     * A [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) instance used to calculate  pixel intensity values based on the features in the current view.
     *
     * [Read more...](global.html)
     */
    view: MapView;
    /**
     * The name of the numeric field for which the statistics will be generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-heatmapStatistics.html#heatmapStatistics)
     */
    field?: string;
    /**
     * The area of influence for each point as a radius in pixels from the point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-heatmapStatistics.html#heatmapStatistics)
     */
    blurRadius?: number;
    /**
     * A subset of features for which to calculate the statistics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-heatmapStatistics.html#heatmapStatistics)
     */
    features?: Graphic[];
  }

  /**
   * The intensity value statistics returned from the [heatmapStatistics()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-heatmapStatistics.html#heatmapStatistics) function.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-heatmapStatistics.html#HeatmapStatisticsResult)
   */
  export interface HeatmapStatisticsResult extends Object {
    /**
     * The average of all pixel intensity values for the given view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-heatmapStatistics.html#HeatmapStatisticsResult)
     */
    avg: number;
    /**
     * The number of features evaluated in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-heatmapStatistics.html#HeatmapStatisticsResult)
     */
    count?: number;
    /**
     * The maximum pixel intensity value of all pixels in the given view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-heatmapStatistics.html#HeatmapStatisticsResult)
     */
    max: number;
    /**
     * The minimum pixel intensity value of all pixels in the given view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-heatmapStatistics.html#HeatmapStatisticsResult)
     */
    min: number;
    /**
     * The standard deviation of the pixel intensity values of all pixels in the given view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-heatmapStatistics.html#HeatmapStatisticsResult)
     */
    stddev: number;
    /**
     * The summary statistics for all values returned from the field, if provided.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-heatmapStatistics.html#HeatmapStatisticsResult)
     */
    summaryStatistics?: SummaryStatisticsResult;
  }

  interface histogram {
    /**
     * Generates a histogram for data returned from a `field` in a given `layer`.The returned object can be used for displayinga histogram to the UI in visualization authoring applications and analytical apps that query anddisplay statistics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)
     *
     * @param params See the table below for details on parameters that may be passed to this function.
     * @param params.layer The layer for which to generate a histogram.
     * @param params.field The name of the numeric field for which the histogram will be generated.  This property is ignored if a `valueExpression` is used.
     * @param params.normalizationField The field by which to normalize the values returned from the given `field`.
     * @param params.classificationMethod The method for classifying the data. See the table belowfor a list of possible values.  | Possible Value | Description ||---------------|------------ || natural-breaks | Data values that cluster are placed into a single class. Class breaks occur where gaps exist between clusters. You should use this method if your data is unevenly distributed; that is, many features have the same or similar values and there are gaps between groups of values. || equal-interval | Each class has an equal range of values; in other words, the difference between the high and low value is equal for each class. You should use this method if your data is evenly distributed and you want to emphasize the difference in values between the features. || quantile | Each class has roughly the same number of features. If your data is evenly distributed and you want to emphasize the difference in relative position between features, you should use the quantile classification method. If, for example, the point values are divided into five classes, points in the highest class would fall into the top fifth of all points.  || standard-deviation | Class breaks are placed above and below the mean value at intervals of `1`, `0.5`, or `0.25` standard deviations until all the data values are included in a class.  |
     * @param params.standardDeviationInterval When `classificationMethod = "standard-deviation"`, thissets the interval at which each class break should be set (e.g. `0.25`, `0.33`, `0.5`, `1`).
     * @param params.minValue The minimum bounding value for the histogram.Use this in conjunction with `maxValue` to generate a histogram between custom lower and upper bounds.
     * @param params.maxValue The maximum bounding value for the histogram. Use thisin conjunction with `minValue` to generate a histogram between custom lower and upper bounds.
     * @param params.numBins Indicates the number of classes to generate for the histogram.
     * @param params.valueExpression An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     * @param params.sqlExpression A SQL expression evaluating to a number.
     * @param params.sqlWhere A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     * @param params.view A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) instance isrequired when a `valueExpression` is specified.
     * @param params.features A subset of features for which to generate the histogram.
     *
     */
    histogram(params: histogramHistogramParams): IPromise<HistogramResult>;
  }

  const __histogramMapped: histogram;
  export const histogram: typeof __histogramMapped.histogram;

  export interface histogramHistogramParams extends Object {
    /**
     * The layer for which to generate a histogram.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | PointCloudLayer | GeoJSONLayer;
    /**
     * The name of the numeric field for which the histogram will be generated.  This property is ignored if a `valueExpression` is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)
     */
    field?: string;
    /**
     * The field by which to normalize the values returned from the given `field`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)
     */
    normalizationField?: string;
    /**
     * The method for classifying the data. See the table belowfor a list of possible values.  | Possible Value | Description ||---------------|------------ || natural-breaks | Data values that cluster are placed into a single class. Class breaks occur where gaps exist between clusters. You should use this method if your data is unevenly distributed; that is, many features have the same or similar values and there are gaps between groups of values. || equal-interval | Each class has an equal range of values; in other words, the difference between the high and low value is equal for each class. You should use this method if your data is evenly distributed and you want to emphasize the difference in values between the features. || quantile | Each class has roughly the same number of features. If your data is evenly distributed and you want to emphasize the difference in relative position between features, you should use the quantile classification method. If, for example, the point values are divided into five classes, points in the highest class would fall into the top fifth of all points.  || standard-deviation | Class breaks are placed above and below the mean value at intervals of `1`, `0.5`, or `0.25` standard deviations until all the data values are included in a class.  |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)
     */
    classificationMethod?: string;
    /**
     * When `classificationMethod = "standard-deviation"`, thissets the interval at which each class break should be set (e.g. `0.25`, `0.33`, `0.5`, `1`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)
     */
    standardDeviationInterval?: number;
    /**
     * The minimum bounding value for the histogram.Use this in conjunction with `maxValue` to generate a histogram between custom lower and upper bounds.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)
     */
    minValue?: number;
    /**
     * The maximum bounding value for the histogram. Use thisin conjunction with `minValue` to generate a histogram between custom lower and upper bounds.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)
     */
    maxValue?: number;
    /**
     * Indicates the number of classes to generate for the histogram.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)
     *
     * @default 10
     */
    numBins?: number;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)
     */
    valueExpression?: string;
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)
     */
    sqlWhere?: string;
    /**
     * A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) instance isrequired when a `valueExpression` is specified.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * A subset of features for which to generate the histogram.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)
     */
    features?: Graphic[];
  }

  /**
   * The result returned from the [histogram()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#HistogramResult)
   */
  export interface HistogramResult extends Object {
    /**
     * An array of objects representing each bin in the histogram.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#HistogramResult)
     */
    bins: Bin[];
    /**
     * The minimum value returned by the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#HistogramResult)
     */
    minValue: number;
    /**
     * The maximum value returned by the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#HistogramResult)
     */
    maxValue: number;
  }

  interface summaryStatistics {
    /**
     * Returns an object containing various statistics describing a set of values returnedfrom a field (or expression) in a [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     *
     * @param params See the table below for details of each parameter.
     * @param params.layer The layer from which to generate statistics for the given `field`.
     * @param params.field The name of the numeric field for which the summary statistics will be generated.  This property is ignored if a `valueExpression` is used.
     * @param params.valueExpression An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     * @param params.sqlExpression A SQL expression evaluating to a number.
     * @param params.sqlWhere A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     * @param params.normalizationField The field by which to normalize the values returned from the given `field`.
     * @param params.minValue The minimum bounding value for the statistics calculation. Use this in conjunction with `maxValue` togenerate statistics between lower and upper bounds.
     * @param params.maxValue The maximum bounding value for the statistics calculation. Use this in conjunction with `minValue` togenerate statistics between lower and upper bounds.
     * @param params.view A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) instance isrequired when a `valueExpression` is specified.
     * @param params.features A subset of features for which to calculate the statistics.
     *
     */
    summaryStatistics(params: summaryStatisticsSummaryStatisticsParams): IPromise<SummaryStatisticsResult>;
  }

  const __summaryStatisticsMapped: summaryStatistics;
  export const summaryStatistics: typeof __summaryStatisticsMapped.summaryStatistics;

  /**
   * The statistics returned from the [summaryStatistics()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html#summaryStatistics) query.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html#SummaryStatisticsResult)
   */
  export interface SummaryStatisticsResult extends Object {
    /**
     * The average of all values returned from the field or expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html#SummaryStatisticsResult)
     */
    avg: number;
    /**
     * The number of features evaluated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html#SummaryStatisticsResult)
     */
    count: number;
    /**
     * The maximum of all values returned from the field or expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html#SummaryStatisticsResult)
     */
    max: number;
    /**
     * The minimum of all values returned from the field or expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html#SummaryStatisticsResult)
     */
    min: number;
    /**
     * The standard deviation calculated from values returned from the field or expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html#SummaryStatisticsResult)
     */
    stddev: number;
    /**
     * The sum of all values returned from the field or expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html#SummaryStatisticsResult)
     */
    sum: number;
    /**
     * The calculated variance from all values returned from the field or expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html#SummaryStatisticsResult)
     */
    variance: number;
  }

  export interface summaryStatisticsSummaryStatisticsParams extends Object {
    /**
     * The layer from which to generate statistics for the given `field`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | PointCloudLayer | GeoJSONLayer;
    /**
     * The name of the numeric field for which the summary statistics will be generated.  This property is ignored if a `valueExpression` is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    field?: string;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    valueExpression?: string;
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    sqlWhere?: string;
    /**
     * The field by which to normalize the values returned from the given `field`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    normalizationField?: string;
    /**
     * The minimum bounding value for the statistics calculation. Use this in conjunction with `maxValue` togenerate statistics between lower and upper bounds.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    minValue?: number;
    /**
     * The maximum bounding value for the statistics calculation. Use this in conjunction with `minValue` togenerate statistics between lower and upper bounds.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    maxValue?: number;
    /**
     * A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) instance isrequired when a `valueExpression` is specified.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * A subset of features for which to calculate the statistics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    features?: Graphic[];
  }

  interface uniqueValues {
    /**
     * Returns an object containing an array of unique values queried from a given field(or values returned from an expression) in a [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) along with the total count of features thatbelong to the given category.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-uniqueValues.html#uniqueValues)
     *
     * @param params See the table below for details of each parameter.
     * @param params.layer The layer from which to query for unique values.
     * @param params.field The name of the numeric or string field from which the unique values will be obtained.  This property is ignored if a `valueExpression` is used.
     * @param params.valueExpression An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number or string.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     * @param params.sqlExpression A SQL expression evaluating to a number or string.
     * @param params.sqlWhere A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     * @param params.returnAllCodedValues Indicates that all domain codes should be returned if the given fieldhas domain values.
     * @param params.view A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) instance isrequired when a `valueExpression` is specified.
     * @param params.features A subset of features for which to generate the unique values.
     *
     */
    uniqueValues(params: uniqueValuesUniqueValuesParams): IPromise<UniqueValuesResult>;
  }

  const __uniqueValuesMapped: uniqueValues;
  export const uniqueValues: typeof __uniqueValuesMapped.uniqueValues;

  /**
   * An object that contains the unique values returned from the [uniqueValues()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-uniqueValues.html#uniqueValues) queryof a layer's field.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-uniqueValues.html#UniqueValuesResult)
   */
  export interface UniqueValuesResult extends Object {
    /**
     * An array of objects, each containing a unique value/type/categorypresent in the field specified in the [uniqueValues()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-uniqueValues.html#uniqueValues) query. See table below forthe specification of each object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-uniqueValues.html#UniqueValuesResult)
     */
    uniqueValueInfos: UniqueValuesResultUniqueValueInfos[];
  }

  export interface uniqueValuesUniqueValuesParams extends Object {
    /**
     * The layer from which to query for unique values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-uniqueValues.html#uniqueValues)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | PointCloudLayer | GeoJSONLayer;
    /**
     * The name of the numeric or string field from which the unique values will be obtained.  This property is ignored if a `valueExpression` is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-uniqueValues.html#uniqueValues)
     */
    field?: string;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression that returns a number or string.This expression can reference field values using the `$feature` global variable. This property overrides the`field` property and therefore is used instead of an input `field` value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-uniqueValues.html#uniqueValues)
     */
    valueExpression?: string;
    /**
     * A SQL expression evaluating to a number or string.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-uniqueValues.html#uniqueValues)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query. For example,this is useful in situations where you want to avoid dividing by zero as is the case with creating a predominancevisualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-uniqueValues.html#uniqueValues)
     */
    sqlWhere?: string;
    /**
     * Indicates that all domain codes should be returned if the given fieldhas domain values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-uniqueValues.html#uniqueValues)
     */
    returnAllCodedValues?: boolean;
    /**
     * A [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) or [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) instance isrequired when a `valueExpression` is specified.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * A subset of features for which to generate the unique values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-uniqueValues.html#uniqueValues)
     */
    features?: Graphic[];
  }

  export interface UniqueValuesResultUniqueValueInfos extends Object {
    /**
     * A unique value representing a type or category of features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-uniqueValues.html#UniqueValuesResult)
     */
    value: string | number;
    /**
     * The number of features assigned the given `value` (or belonging to the given category).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-uniqueValues.html#UniqueValuesResult)
     */
    count: number;
  }

  interface symbologyColor {
    /**
     * Clones a color scheme object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#cloneScheme)
     *
     * @param scheme The color scheme object to clone.
     *
     */
    cloneScheme(scheme: ColorScheme): ColorScheme;
    /**
     * Flips the colors in reverse order of the input color scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#flipColors)
     *
     * @param scheme The color scheme to reverse.
     *
     */
    flipColors(scheme: ColorScheme): ColorScheme;
    /**
     * Returns all schemes matching the given color ramp.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getMatchingSchemes)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.theme The name of the theme from which to get color schemes.
     * @param params.colors An array of colors used to match with schemes for the given theme.
     * @param params.geometryType The geometry type of the layer for which the color scheme will be applied.
     * @param params.worldScale Indicates whether 3D volumetric symbols will be used in the visualization.
     * @param params.view The [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) instance used to calculate  the suggested sizes of the symbols.  This is required for 3D visualizations.
     *
     */
    getMatchingSchemes(params: colorGetMatchingSchemesParams): ColorScheme[];
    /**
     * Returns a color scheme with the provided name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getSchemeByName)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.name The name of the scheme to retrieve.
     * @param params.basemap The basemap to pair with the visualization. Thisvalue indicates the best symbol colors for visualizing features against the given basemap.
     * @param params.geometryType The geometry type of the features to visualize.**Possible Values:** point | multipoint | polyline | polygon | mesh
     * @param params.theme The theme determines which values will be emphasized in the continuous ramp and the map.Possible values are listed below.| Value | Description | Example || ----- | ----------- | ------- || high-to-low | High values are emphasized with strong colors. | ![high-to-low](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-high-to-low.png) || above-and-below | Values centered around a given point (e.g. the average) are visualized with weak colors while other values are emphasized with strong colors. | ![above-and-below](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-above-and-below.png) || centered-on | Values centered around a given point (e.g. the average) are emphasized with strong colors while other values are visualized with weak colors. | ![centered-on](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-centered-on.png) || extremes | High and low values are emphasized with strong colors. All others are visualized with weak colors. | ![extremes](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-extremes.png) |
     * @param params.view The SceneView instance in which the schemewill be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     * @param params.worldScale Indicates if the size units of the scheme will be in meters.This should be `true` when the scheme is intended for 3D volumetric symbology.A `view` must be provided if this property is set to `true`.
     *
     */
    getSchemeByName(params: colorGetSchemeByNameParams): ColorScheme;
    /**
     * Returns a primary scheme and secondary schemes defining symbol properties fordata-driven color visualizations ina [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html). The `basemap` parameter determines the color schemes of thegraphics used to visualize each feature. The `geometryType` determines which type of symbol to return.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getSchemes)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.basemap The basemap to pair with the visualization. Thisvalue indicates the best symbol colors for visualizing features against the given basemap.
     * @param params.geometryType The geometry type of the features to visualize.     **Possible Values:** point | multipoint | polyline | polygon | mesh
     * @param params.theme The theme determines which values will be emphasized in the continuous ramp and the map.Possible values are listed below.| Value | Description | Example || ----- | ----------- | ------- || high-to-low | High values are emphasized with strong colors. | ![high-to-low](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-high-to-low.png) || above-and-below | Values centered around a given point (e.g. the average) are visualized with weak colors while other values are emphasized with strong colors. | ![above-and-below](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-above-and-below.png) || centered-on | Values centered around a given point (e.g. the average) are emphasized with strong colors while other values are visualized with weak colors. | ![centered-on](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-centered-on.png) || extremes | High and low values are emphasized with strong colors. All others are visualized with weak colors. | ![extremes](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-extremes.png) |
     * @param params.view The SceneView instance in which the schemewill be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     * @param params.worldScale Indicates if the size units of the scheme will be in meters.This should be `true` when the scheme is intended for 3D volumetric symbology.A `view` must be provided if this property is set to `true`.
     *
     */
    getSchemes(params: colorGetSchemesParams): ColorSchemes;
    /**
     * Returns an array of color schemes with the provided tags. These schemes define symbol properties fordata-driven color visualizations in any layer that can be rendered with a [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getSchemesByTag)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.includedTags When provided, only schemes containing all the matching tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     * @param params.excludedTags When provided, only schemes missing all the provided tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     * @param params.basemap The basemap to pair with the visualization. Thisvalue indicates the best symbol colors for visualizing features against the given basemap.
     * @param params.geometryType The geometry type of the features to visualize.**Possible Values:** point | multipoint | polyline | polygon | mesh
     * @param params.theme The theme determines which values will be emphasized in the continuous ramp and the map.Possible values are listed below.| Value | Description | Example || ----- | ----------- | ------- || high-to-low | High values are emphasized with strong colors. | ![high-to-low](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-high-to-low.png) || above-and-below | Values centered around a given point (e.g. the average) are visualized with weak colors while other values are emphasized with strong colors. | ![above-and-below](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-above-and-below.png) || centered-on | Values centered around a given point (e.g. the average) are emphasized with strong colors while other values are visualized with weak colors. | ![centered-on](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-centered-on.png) || extremes | High and low values are emphasized with strong colors. All others are visualized with weak colors. | ![extremes](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-extremes.png) |
     * @param params.view The SceneView instance in which the schemewill be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     * @param params.worldScale Indicates if the size units of the scheme will be in meters.This should be `true` when the scheme is intended for 3D volumetric symbology.A `view` must be provided if this property is set to `true`.
     *
     */
    getSchemesByTag(params: colorGetSchemesByTagParams): ColorScheme[];
    /**
     * Returns metadata for the available themes. If a basemap is provided, returns themes that work bestwith the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getThemes)
     *
     * @param basemap The [Esri basemap string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap)  or object that will be used with the returned theme(s).
     *
     */
    getThemes(basemap?: string | Basemap): Theme[];
  }

  export const symbologyColor: symbologyColor;

  export interface colorGetMatchingSchemesParams extends Object {
    /**
     * The name of the theme from which to get color schemes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getMatchingSchemes)
     */
    theme: string;
    /**
     * An array of colors used to match with schemes for the given theme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getMatchingSchemes)
     */
    colors: Color[];
    /**
     * The geometry type of the layer for which the color scheme will be applied.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getMatchingSchemes)
     */
    geometryType: string;
    /**
     * Indicates whether 3D volumetric symbols will be used in the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getMatchingSchemes)
     */
    worldScale?: boolean;
    /**
     * The [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) instance used to calculate  the suggested sizes of the symbols.  This is required for 3D visualizations.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
  }

  export interface colorGetSchemeByNameParams extends Object {
    /**
     * The name of the scheme to retrieve.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getSchemeByName)
     */
    name: string;
    /**
     * The basemap to pair with the visualization. Thisvalue indicates the best symbol colors for visualizing features against the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getSchemeByName)
     */
    basemap: string | Basemap;
    /**
     * The geometry type of the features to visualize.**Possible Values:** point | multipoint | polyline | polygon | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getSchemeByName)
     */
    geometryType: string;
    /**
     * The theme determines which values will be emphasized in the continuous ramp and the map.Possible values are listed below.| Value | Description | Example || ----- | ----------- | ------- || high-to-low | High values are emphasized with strong colors. | ![high-to-low](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-high-to-low.png) || above-and-below | Values centered around a given point (e.g. the average) are visualized with weak colors while other values are emphasized with strong colors. | ![above-and-below](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-above-and-below.png) || centered-on | Values centered around a given point (e.g. the average) are emphasized with strong colors while other values are visualized with weak colors. | ![centered-on](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-centered-on.png) || extremes | High and low values are emphasized with strong colors. All others are visualized with weak colors. | ![extremes](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-extremes.png) |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getSchemeByName)
     */
    theme: string;
    /**
     * The SceneView instance in which the schemewill be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
    /**
     * Indicates if the size units of the scheme will be in meters.This should be `true` when the scheme is intended for 3D volumetric symbology.A `view` must be provided if this property is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getSchemeByName)
     */
    worldScale?: boolean;
  }

  export interface colorGetSchemesByTagParams extends Object {
    /**
     * When provided, only schemes containing all the matching tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getSchemesByTag)
     */
    includedTags?: string[];
    /**
     * When provided, only schemes missing all the provided tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getSchemesByTag)
     */
    excludedTags?: string[];
    /**
     * The basemap to pair with the visualization. Thisvalue indicates the best symbol colors for visualizing features against the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getSchemesByTag)
     */
    basemap: string | Basemap;
    /**
     * The geometry type of the features to visualize.**Possible Values:** point | multipoint | polyline | polygon | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getSchemesByTag)
     */
    geometryType: string;
    /**
     * The theme determines which values will be emphasized in the continuous ramp and the map.Possible values are listed below.| Value | Description | Example || ----- | ----------- | ------- || high-to-low | High values are emphasized with strong colors. | ![high-to-low](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-high-to-low.png) || above-and-below | Values centered around a given point (e.g. the average) are visualized with weak colors while other values are emphasized with strong colors. | ![above-and-below](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-above-and-below.png) || centered-on | Values centered around a given point (e.g. the average) are emphasized with strong colors while other values are visualized with weak colors. | ![centered-on](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-centered-on.png) || extremes | High and low values are emphasized with strong colors. All others are visualized with weak colors. | ![extremes](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-extremes.png) |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getSchemesByTag)
     */
    theme: string;
    /**
     * The SceneView instance in which the schemewill be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
    /**
     * Indicates if the size units of the scheme will be in meters.This should be `true` when the scheme is intended for 3D volumetric symbology.A `view` must be provided if this property is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getSchemesByTag)
     */
    worldScale?: boolean;
  }

  export interface colorGetSchemesParams extends Object {
    /**
     * The basemap to pair with the visualization. Thisvalue indicates the best symbol colors for visualizing features against the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getSchemes)
     */
    basemap: string | Basemap;
    /**
     * The geometry type of the features to visualize.     **Possible Values:** point | multipoint | polyline | polygon | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getSchemes)
     */
    geometryType: string;
    /**
     * The theme determines which values will be emphasized in the continuous ramp and the map.Possible values are listed below.| Value | Description | Example || ----- | ----------- | ------- || high-to-low | High values are emphasized with strong colors. | ![high-to-low](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-high-to-low.png) || above-and-below | Values centered around a given point (e.g. the average) are visualized with weak colors while other values are emphasized with strong colors. | ![above-and-below](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-above-and-below.png) || centered-on | Values centered around a given point (e.g. the average) are emphasized with strong colors while other values are visualized with weak colors. | ![centered-on](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-centered-on.png) || extremes | High and low values are emphasized with strong colors. All others are visualized with weak colors. | ![extremes](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-extremes.png) |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getSchemes)
     */
    theme: string;
    /**
     * The SceneView instance in which the schemewill be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
    /**
     * Indicates if the size units of the scheme will be in meters.This should be `true` when the scheme is intended for 3D volumetric symbology.A `view` must be provided if this property is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getSchemes)
     */
    worldScale?: boolean;
  }

  /**
   * Properties defining the symbology scheme used to visualize features with attribute data-driven color.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorScheme)
   */
  export type ColorScheme = ColorSchemeForPoint | ColorSchemeForPolyline | ColorSchemeForPolygon | ColorSchemeForMesh;

  /**
   * Properties defining the symbology scheme used to visualize mesh features with attribute data-driven color.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForMesh)
   */
  export interface ColorSchemeForMesh extends Object {
    /**
     * The unique name of the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForMesh)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForMesh)
     */
    tags: string[];
    /**
     * The unique id of the color scheme to usee in the visualization. The id isassigned based on the following template: `<themeName>/<basemapName>/<schemeName>`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForMesh)
     */
    id: string;
    /**
     * Indicates which values will be emphasized in the continuous ramp and the map.Possible values are listed below.| Value | Description | Example || ----- | ----------- | ------- || high-to-low | High values are emphasized with strong colors. | ![high-to-low](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-high-to-low.png) || above-and-below | Values centered around a given point (e.g. the average) are visualized with weak colors while other values are emphasized with strong colors. | ![above-and-below](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-above-and-below.png) || centered-on | Values centered around a given point (e.g. the average) are emphasized with strong colors while other values are visualized with weak colors. | ![centered-on](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-centered-on.png) || extremes | High and low values are emphasized with strong colors. All others are visualized with weak colors. | ![extremes](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-extremes.png) |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForMesh)
     */
    theme: string;
    /**
     * The continuous color ramp that will be applied to the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForMesh)
     */
    colors: Color[];
    /**
     * The color of the symbol used to indicatefeatures with no data and features that are out of range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForMesh)
     */
    noDataColor: Color;
    /**
     * Predefined classed color schemes to use for the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForMesh)
     */
    colorsForClassBreaks: ColorSchemeForMeshColorsForClassBreaks[];
    /**
     * The opacity of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForMesh)
     */
    opacity: number;
  }

  /**
   * Properties defining the symbology scheme used to visualize point features with attribute data-driven color.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPoint)
   */
  export interface ColorSchemeForPoint extends Object {
    /**
     * The unique name of the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    tags: string[];
    /**
     * The unique id of the color scheme to usee in the visualization. The id isassigned based on the following template: `<themeName>/<basemapName>/<schemeName>`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    id: string;
    /**
     * Indicates which values will be emphasized in the continuous ramp and the map.Possible values are listed below.| Value | Description | Example || ----- | ----------- | ------- || high-to-low | High values are emphasized with strong colors. | ![high-to-low](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-high-to-low.png) || above-and-below | Values centered around a given point (e.g. the average) are visualized with weak colors while other values are emphasized with strong colors. | ![above-and-below](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-above-and-below.png) || centered-on | Values centered around a given point (e.g. the average) are emphasized with strong colors while other values are visualized with weak colors. | ![centered-on](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-centered-on.png) || extremes | High and low values are emphasized with strong colors. All others are visualized with weak colors. | ![extremes](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-extremes.png) |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    theme: string;
    /**
     * The continuous color ramp that will be applied to the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    colors: Color[];
    /**
     * The color of the symbol used to indicatefeatures with no data and features that are out of range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    noDataColor: Color;
    /**
     * Predefined classed color schemes to use for the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    colorsForClassBreaks: ColorSchemeForPointColorsForClassBreaks[];
    /**
     * Properties for defining the outline of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    outline: ColorSchemeForPointOutline;
    /**
     * The default size of the symbol in pixels or points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    size: number;
    /**
     * The opacity of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    opacity: number;
  }

  /**
   * Properties defining the symbology scheme used to visualize polygon features with attribute data-driven color.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolygon)
   */
  export interface ColorSchemeForPolygon extends Object {
    /**
     * The unique name of the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolygon)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolygon)
     */
    tags: string[];
    /**
     * The unique id of the color scheme to usee in the visualization. The id isassigned based on the following template: `<themeName>/<basemapName>/<schemeName>`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolygon)
     */
    id: string;
    /**
     * Indicates which values will be emphasized in the continuous ramp and the map.Possible values are listed below.| Value | Description | Example || ----- | ----------- | ------- || high-to-low | High values are emphasized with strong colors. | ![high-to-low](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-high-to-low.png) || above-and-below | Values centered around a given point (e.g. the average) are visualized with weak colors while other values are emphasized with strong colors. | ![above-and-below](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-above-and-below.png) || centered-on | Values centered around a given point (e.g. the average) are emphasized with strong colors while other values are visualized with weak colors. | ![centered-on](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-centered-on.png) || extremes | High and low values are emphasized with strong colors. All others are visualized with weak colors. | ![extremes](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-extremes.png) |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolygon)
     */
    theme: string;
    /**
     * The continuous color ramp that will be applied to the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolygon)
     */
    colors: Color[];
    /**
     * The color of the symbol used to indicatefeatures with no data and features that are out of range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolygon)
     */
    noDataColor: Color;
    /**
     * Predefined classed color schemes to use for the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolygon)
     */
    colorsForClassBreaks: ColorSchemeForPolygonColorsForClassBreaks[];
    /**
     * Properties for defining the outline of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolygon)
     */
    outline: ColorSchemeForPolygonOutline;
    /**
     * The opacity of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolygon)
     */
    opacity: number;
  }

  /**
   * Properties defining the symbology scheme used to visualize polyline features with attribute data-driven color.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolyline)
   */
  export interface ColorSchemeForPolyline extends Object {
    /**
     * The unique name of the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolyline)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolyline)
     */
    tags: string[];
    /**
     * The unique id of the color scheme to usee in the visualization. The id isassigned based on the following template: `<themeName>/<basemapName>/<schemeName>`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolyline)
     */
    id: string;
    /**
     * Indicates which values will be emphasized in the continuous ramp and the map.Possible values are listed below.| Value | Description | Example || ----- | ----------- | ------- || high-to-low | High values are emphasized with strong colors. | ![high-to-low](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-high-to-low.png) || above-and-below | Values centered around a given point (e.g. the average) are visualized with weak colors while other values are emphasized with strong colors. | ![above-and-below](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-above-and-below.png) || centered-on | Values centered around a given point (e.g. the average) are emphasized with strong colors while other values are visualized with weak colors. | ![centered-on](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-centered-on.png) || extremes | High and low values are emphasized with strong colors. All others are visualized with weak colors. | ![extremes](https://developers.arcgis.com/javascript/assets/img/apiref/renderers/sm-extremes.png) |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolyline)
     */
    theme: string;
    /**
     * The continuous color ramp that will be applied to the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolyline)
     */
    colors: Color[];
    /**
     * The color of the symbol used to indicatefeatures with no data and features that are out of range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolyline)
     */
    noDataColor: Color;
    /**
     * Predefined classed color schemes to use for the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolyline)
     */
    colorsForClassBreaks: ColorSchemeForPolylineColorsForClassBreaks[];
    /**
     * The default width of the symbol in pixels or points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolyline)
     */
    width: number;
    /**
     * The opacity of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolyline)
     */
    opacity: number;
  }

  /**
   * The return object of the [getSchemes()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#getSchemes) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemes)
   */
  export interface ColorSchemes extends Object {
    /**
     * The color scheme best suited for the given basemap and geometry type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemes)
     */
    primaryScheme: ColorScheme;
    /**
     * Additional color schemes that may be used to visualize data of the given geometry type overlaid on the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemes)
     */
    secondarySchemes: ColorScheme[];
    /**
     * The ID of the basemap associated with the given schemes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemes)
     */
    basemapId: string;
  }

  /**
   * Describes a theme that pairs well with the given basemaps.See the table below for more details of the properties in this object.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#Theme)
   */
  export interface Theme extends Object {
    /**
     * The name of the theme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#Theme)
     */
    name: string;
    /**
     * The label identifying the theme in UI elements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#Theme)
     */
    label: string;
    /**
     * Text describing the theme in the UI.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#Theme)
     */
    description: string;
    /**
     * The Esri basemaps that pair well with the given theme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#Theme)
     */
    basemaps: string[];
  }

  export interface ColorSchemeForMeshColorsForClassBreaks extends Object {
    /**
     * An array of hex color strings. Each color isassigned to a specific break in classed color visualizations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForMesh)
     */
    colors: Color[];
    /**
     * The number of classes used in the classed color visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForMesh)
     */
    numClasses: number;
  }

  export interface ColorSchemeForPointColorsForClassBreaks extends Object {
    /**
     * An array of hex color strings. Each color isassigned to a specific break in classed color visualizations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    colors: Color[];
    /**
     * The number of classes used in the classed color visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    numClasses: number;
  }

  export interface ColorSchemeForPointOutline extends Object {
    /**
     * The outline color of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    color: Color;
    /**
     * The width of the symbol in pixels or points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    width: number;
  }

  export interface ColorSchemeForPolygonColorsForClassBreaks extends Object {
    /**
     * An array of hex color strings. Each color isassigned to a specific break in classed color visualizations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolygon)
     */
    colors: Color[];
    /**
     * The number of classes used in the classed color visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolygon)
     */
    numClasses: number;
  }

  export interface ColorSchemeForPolygonOutline extends Object {
    /**
     * The outline color of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolygon)
     */
    color: Color;
    /**
     * The width of the symbol in pixels or points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolygon)
     */
    width: number;
  }

  export interface ColorSchemeForPolylineColorsForClassBreaks extends Object {
    /**
     * An array of hex color strings. Each color isassigned to a specific break in classed color visualizations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolyline)
     */
    colors: Color[];
    /**
     * The number of classes used in the classed color visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-color.html#ColorSchemeForPolyline)
     */
    numClasses: number;
  }

  interface symbologyDotDensity {
    /**
     * Clones a dot density scheme object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#cloneScheme)
     *
     * @param scheme The dot density scheme object to clone.
     *
     */
    cloneScheme(scheme: DotDensityScheme): DotDensityScheme;
    /**
     * Returns a dot density scheme with the provided name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#getSchemeByName)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.name The name of the scheme to retrieve.
     * @param params.basemap The basemap to pair with the visualization. This  value indicates the best symbol color for visualizing features with the given basemap.
     * @param params.numColors The number of colors to visualize.
     *
     */
    getSchemeByName(params: dotDensityGetSchemeByNameParams): DotDensityScheme;
    /**
     * Returns a primary scheme and secondary schemes defining symbol properties for dot density-baseddata-driven visualizations in a [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html). The `basemap` parameter determines the color of thedots used to visualize each attribute. The `geometryType` determines which type of symbol to return.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#getSchemes)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.basemap The basemap to pair with the visualization. This  value indicates the best symbol color for visualizing features with the given basemap.
     * @param params.numColors The number of colors to visualize.
     *
     */
    getSchemes(params: dotDensityGetSchemesParams): DotDensitySchemes;
    /**
     * Returns an array of dot density schemes with the provided tags. These schemes define symbol properties fordot density visualizations in any layer that can be rendered with a [DotDensityRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#getSchemesByTag)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.includedTags When provided, only schemes containing all the matching tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     * @param params.excludedTags When provided, only schemes missing all the provided tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     * @param params.basemap The basemap to pair with the visualization. This  value indicates the best symbol color for visualizing features with the given basemap.
     * @param params.numColors The number of colors to visualize.
     *
     */
    getSchemesByTag(params: dotDensityGetSchemesByTagParams): DotDensityScheme[];
  }

  export const symbologyDotDensity: symbologyDotDensity;

  export interface dotDensityGetSchemeByNameParams extends Object {
    /**
     * The name of the scheme to retrieve.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#getSchemeByName)
     */
    name: string;
    /**
     * The basemap to pair with the visualization. This  value indicates the best symbol color for visualizing features with the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#getSchemeByName)
     */
    basemap: string | Basemap;
    /**
     * The number of colors to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#getSchemeByName)
     */
    numColors: number;
  }

  export interface dotDensityGetSchemesByTagParams extends Object {
    /**
     * When provided, only schemes containing all the matching tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#getSchemesByTag)
     */
    includedTags?: string[];
    /**
     * When provided, only schemes missing all the provided tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#getSchemesByTag)
     */
    excludedTags?: string[];
    /**
     * The basemap to pair with the visualization. This  value indicates the best symbol color for visualizing features with the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#getSchemesByTag)
     */
    basemap: string | Basemap;
    /**
     * The number of colors to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#getSchemesByTag)
     */
    numColors: number;
  }

  export interface dotDensityGetSchemesParams extends Object {
    /**
     * The basemap to pair with the visualization. This  value indicates the best symbol color for visualizing features with the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#getSchemes)
     */
    basemap: string | Basemap;
    /**
     * The number of colors to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#getSchemes)
     */
    numColors: number;
  }

  /**
   * Properties defining the symbology scheme used to visualize predominance for polygon features.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#DotDensityScheme)
   */
  export interface DotDensityScheme extends Object {
    /**
     * The unique name of the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#DotDensityScheme)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#DotDensityScheme)
     */
    tags: string[];
    /**
     * The dot color for each attribute.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#DotDensityScheme)
     */
    colors: Color[];
    /**
     * Properties for defining the outline of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#DotDensityScheme)
     */
    outline: DotDensitySchemeOutline;
    /**
     * The opacity of the symbol (0 - 1).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#DotDensityScheme)
     */
    opacity: number;
  }

  /**
   * The return object of the [getSchemes()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#getSchemes) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#DotDensitySchemes)
   */
  export interface DotDensitySchemes extends Object {
    /**
     * The dot density scheme best suited for the given basemap and geometry type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#DotDensitySchemes)
     */
    primaryScheme: DotDensityScheme;
    /**
     * Additional dot density schemes that may be used to visualize data of the given geometry type overlaid on the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#DotDensitySchemes)
     */
    secondarySchemes: DotDensityScheme[];
    /**
     * The ID of the basemap associated with the given schemes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#DotDensitySchemes)
     */
    basemapId: string;
  }

  export interface DotDensitySchemeOutline extends Object {
    /**
     * The outline color of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#DotDensityScheme)
     */
    color: Color;
    /**
     * The width of the symbol's outline in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-dotDensity.html#DotDensityScheme)
     */
    width: number;
  }

  interface symbologyHeatmap {
    /**
     * Clones a heatmap scheme object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#cloneScheme)
     *
     * @param scheme The heatmap scheme object to clone.
     *
     */
    cloneScheme(scheme: HeatmapScheme): HeatmapScheme;
    /**
     * Returns a heatmap scheme with the provided name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#getSchemeByName)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.name The name of the scheme to retrieve.
     * @param params.basemap The basemap to pair with the visualization. This  value indicates the best colors for visualizing features against the given basemap.
     *
     */
    getSchemeByName(params: heatmapGetSchemeByNameParams): HeatmapScheme;
    /**
     * Returns a primary scheme and secondary schemes defining properties forheatmap visualizations ina point [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html). The `basemap` parameter determines the color schemes of theheatmap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#getSchemes)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.basemap The basemap to pair with the visualization. This  value indicates the best colors for overlaying a heatmap against the given basemap.
     *
     */
    getSchemes(params: heatmapGetSchemesParams): HeatmapSchemes;
    /**
     * Returns an array of heatmap schemes with the provided tags. These schemes define color stop properties forany layer that can be rendered with a [HeatmapRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#getSchemesByTag)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.includedTags When provided, only schemes containing all the matching tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     * @param params.excludedTags When provided, only schemes missing all the provided tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     * @param params.basemap The basemap to pair with the visualization. Thisvalue indicates the best symbol colors for visualizing features against the given basemap.
     *
     */
    getSchemesByTag(params: heatmapGetSchemesByTagParams): HeatmapScheme[];
    /**
     * Returns metadata for the available themes. If a basemap is provided, returns themes that work bestwith the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#getThemes)
     *
     * @param basemap The [Esri basemap string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap)  or object that will be used with the returned theme(s).
     *
     */
    getThemes(basemap?: string | Basemap): Theme[];
  }

  export const symbologyHeatmap: symbologyHeatmap;

  export interface heatmapGetSchemeByNameParams extends Object {
    /**
     * The name of the scheme to retrieve.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#getSchemeByName)
     */
    name: string;
    /**
     * The basemap to pair with the visualization. This  value indicates the best colors for visualizing features against the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#getSchemeByName)
     */
    basemap: string | Basemap;
  }

  export interface heatmapGetSchemesByTagParams extends Object {
    /**
     * When provided, only schemes containing all the matching tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#getSchemesByTag)
     */
    includedTags?: string[];
    /**
     * When provided, only schemes missing all the provided tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#getSchemesByTag)
     */
    excludedTags?: string[];
    /**
     * The basemap to pair with the visualization. Thisvalue indicates the best symbol colors for visualizing features against the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#getSchemesByTag)
     */
    basemap: string | Basemap;
  }

  export interface heatmapGetSchemesParams extends Object {
    /**
     * The basemap to pair with the visualization. This  value indicates the best colors for overlaying a heatmap against the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#getSchemes)
     */
    basemap: string | Basemap;
  }

  /**
   * Properties defining the symbology scheme used to visualize point features as a heatmap.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#HeatmapScheme)
   */
  export interface HeatmapScheme extends Object {
    /**
     * The unique name of the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#HeatmapScheme)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#HeatmapScheme)
     */
    tags: string[];
    /**
     * The unique id of the color scheme to usee in the visualization. The id is  assigned based on the following template: `<themeName>/<basemapName>/<schemeName>`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#HeatmapScheme)
     */
    id: string;
    /**
     * A continuous color ramp used to construct a heatmap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#HeatmapScheme)
     */
    colors: Color[];
    /**
     * The opacity of the heatmap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#HeatmapScheme)
     */
    opacity: number;
  }

  /**
   * The return object of the [getSchemes()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#getSchemes) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#HeatmapSchemes)
   */
  export interface HeatmapSchemes extends Object {
    /**
     * The heatmap color scheme best suited for the given basemap and geometry type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#HeatmapSchemes)
     */
    primaryScheme: HeatmapScheme;
    /**
     * Additional heatmap color schemes that may be used to visualize data overlaid on the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#HeatmapSchemes)
     */
    secondarySchemes: HeatmapScheme[];
    /**
     * The ID of the basemap associated with the given schemes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-heatmap.html#HeatmapSchemes)
     */
    basemapId: string;
  }

  interface symbologyLocation {
    /**
     * Clones a location scheme object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#cloneScheme)
     *
     * @param scheme The location scheme object to clone.
     *
     */
    cloneScheme(scheme: LocationScheme): LocationScheme;
    /**
     * Returns a primary scheme and secondary schemes defining symbol properties forlocation-only visualizions ina [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) or [SceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html).The `basemap` parameter determines the color of thegraphics used to visualize each feature. The `geometryType` determines which type of symbol to return.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#getSchemes)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.basemap The basemap to pair with the visualization. Thisvalue indicates the best symbol color for visualizing features on top of the given basemap.
     * @param params.geometryType The geometry type of the features to visualize.     **Possible Values:** point | multipoint | polyline | polygon | mesh
     * @param params.view The SceneView instance in which the schemewill be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     * @param params.worldScale Indicates if the size units of the scheme will be in meters.This should be `true` when the scheme is intended for 3D volumetric symbology.A `view` must be provided if this property is set to `true`.
     *
     */
    getSchemes(params: locationGetSchemesParams): LocationSchemes;
    /**
     * Returns metadata for the available themes. If a basemap is provided, returns themes that work bestwith the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#getThemes)
     *
     * @param basemap The [Esri basemap string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap)  or object that will be used with the returned theme(s).
     *
     */
    getThemes(basemap?: string | Basemap): Theme[];
  }

  export const symbologyLocation: symbologyLocation;

  export interface locationGetSchemesParams extends Object {
    /**
     * The basemap to pair with the visualization. Thisvalue indicates the best symbol color for visualizing features on top of the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#getSchemes)
     */
    basemap: string | Basemap;
    /**
     * The geometry type of the features to visualize.     **Possible Values:** point | multipoint | polyline | polygon | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#getSchemes)
     */
    geometryType: string;
    /**
     * The SceneView instance in which the schemewill be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
    /**
     * Indicates if the size units of the scheme will be in meters.This should be `true` when the scheme is intended for 3D volumetric symbology.A `view` must be provided if this property is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#getSchemes)
     */
    worldScale?: boolean;
  }

  /**
   * Defines the symbology scheme used to visualize default location-based symbols depending on the layer's geometry type.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationScheme)
   */
  export type LocationScheme =
    | LocationSchemeForPoint
    | LocationSchemeForPolyline
    | LocationSchemeForPolygon
    | LocationSchemeForMesh;

  /**
   * Properties defining the location-only symbology scheme used to visualize mesh features.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForMesh)
   */
  export interface LocationSchemeForMesh extends Object {
    /**
     * The color of the fill symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForMesh)
     */
    color: Color;
    /**
     * The opacity of the fill symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForMesh)
     */
    opacity: number;
  }

  /**
   * Properties defining the location-only symbology scheme used to visualize point features.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForPoint)
   */
  export interface LocationSchemeForPoint extends Object {
    /**
     * The fill color of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForPoint)
     */
    color: Color;
    /**
     * Properties for defining the outline of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForPoint)
     */
    outline: LocationSchemeForPointOutline;
    /**
     * The size of the marker symbol in pixels or points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForPoint)
     */
    size: number;
    /**
     * The opacity of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForPoint)
     */
    opacity: number;
  }

  /**
   * Properties defining the location-only symbology scheme used to visualize polygon features.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForPolygon)
   */
  export interface LocationSchemeForPolygon extends Object {
    /**
     * The color of the fill symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForPolygon)
     */
    color: Color;
    /**
     * Properties for defining the outline of the fill symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForPolygon)
     */
    outline: LocationSchemeForPolygonOutline;
    /**
     * The opacity of the fill symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForPolygon)
     */
    opacity: number;
  }

  /**
   * Properties defining the location-only symbology scheme used to visualize polyline features.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForPolyline)
   */
  export interface LocationSchemeForPolyline extends Object {
    /**
     * The color of the line symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForPolyline)
     */
    color: Color;
    /**
     * The width of the line symbol in pixels or points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForPolyline)
     */
    width: number;
    /**
     * The opacity of the line symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForPolyline)
     */
    opacity: number;
  }

  /**
   * The return object of the [getSchemes()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#getSchemes) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemes)
   */
  export interface LocationSchemes extends Object {
    /**
     * The location scheme best suited for the given basemap and geometry type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemes)
     */
    primaryScheme: LocationScheme;
    /**
     * Additional location schemes that may be used to visualize data of the given geometry type overlaid on the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemes)
     */
    secondarySchemes: LocationScheme[];
    /**
     * The ID of the basemap associated with the given schemes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemes)
     */
    basemapId: string;
  }

  export interface LocationSchemeForPointOutline extends Object {
    /**
     * The outline color of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForPoint)
     */
    color: Color;
    /**
     * The width of the marker symbol in pixels or points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForPoint)
     */
    width: number;
  }

  export interface LocationSchemeForPolygonOutline extends Object {
    /**
     * The outline color of the fill symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForPolygon)
     */
    color: Color;
    /**
     * The width of the fill symbol in pixels or points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-location.html#LocationSchemeForPolygon)
     */
    width: number;
  }

  interface symbologyPredominance {
    /**
     * Clones a predominance scheme object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#cloneScheme)
     *
     * @param scheme The predominance scheme object to clone.
     *
     */
    cloneScheme(scheme: PredominanceScheme): PredominanceScheme;
    /**
     * Returns a predominance scheme with the provided name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemeByName)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.name The name of the scheme to retrieve.
     * @param params.basemap The basemap to pair with the visualization. This  value indicates the best symbol color for visualizing features with the given basemap.
     * @param params.geometryType The geometry type of the features to visualize.  **Possible Values:** point | multipoint | polyline | polygon | mesh
     * @param params.numColors The number of unique values to include in the predominance visualization.
     * @param params.theme Determines which set of primary and secondary color schemes to return**Possible Values:** default
     * @param params.worldScale Indicates if the size units of the scheme will be in meters.  This should be `true` when the scheme is intended for 3D volumetric symbology.  A `view` must be provided if this property is set to `true`.
     * @param params.view The SceneView instance in which the scheme  will be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     */
    getSchemeByName(params: predominanceGetSchemeByNameParams): PredominanceScheme;
    /**
     * Returns a primary scheme and secondary schemes defining symbol properties for predominance-baseddata-driven visualizations in a [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html). The `basemap` parameter determines the color of thesymbols used to visualize each feature. The `geometryType` determines which type of symbol to return.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemes)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.basemap The basemap to pair with the visualization. This  value indicates the best symbol color for visualizing features with the given basemap.
     * @param params.geometryType The geometry type of the features to visualize.  **Possible Values:** point | multipoint | polyline | polygon | mesh
     * @param params.numColors The number of unique values to include in the predominance visualization.
     * @param params.theme Determines which set of primary and secondary color schemes to return**Possible Values:** default
     * @param params.worldScale Indicates if the size units of the scheme will be in meters.  This should be `true` when the scheme is intended for 3D volumetric symbology.  A `view` must be provided if this property is set to `true`.
     * @param params.view The SceneView instance in which the scheme  will be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     */
    getSchemes(params: predominanceGetSchemesParams): PredominanceSchemes;
    /**
     * Returns an array of predominance schemes with the provided tags. These schemes define symbol properties forpredominance visualizations in any layer that can be rendered with a [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemesByTag)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.includedTags When provided, only schemes containing all the matching tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     * @param params.excludedTags When provided, only schemes missing all the provided tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     * @param params.basemap The basemap to pair with the visualization. This  value indicates the best symbol color for visualizing features with the given basemap.
     * @param params.geometryType The geometry type of the features to visualize.  **Possible Values:** point | multipoint | polyline | polygon | mesh
     * @param params.numColors The number of unique values to include in the predominance visualization.
     * @param params.theme Determines which set of primary and secondary color schemes to return**Possible Values:** default
     * @param params.worldScale Indicates if the size units of the scheme will be in meters.  This should be `true` when the scheme is intended for 3D volumetric symbology.  A `view` must be provided if this property is set to `true`.
     * @param params.view The SceneView instance in which the scheme  will be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     */
    getSchemesByTag(params: predominanceGetSchemesByTagParams): PredominanceScheme[];
    /**
     * Returns metadata for the available themes. If a basemap is provided, returns themes that work bestwith the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getThemes)
     *
     * @param basemap The [Esri basemap string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap)  or object that will be used with the returned theme(s).
     *
     */
    getThemes(basemap?: string | Basemap): Theme[];
  }

  export const symbologyPredominance: symbologyPredominance;

  export interface predominanceGetSchemeByNameParams extends Object {
    /**
     * The name of the scheme to retrieve.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemeByName)
     */
    name: string;
    /**
     * The basemap to pair with the visualization. This  value indicates the best symbol color for visualizing features with the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemeByName)
     */
    basemap: string | Basemap;
    /**
     * The geometry type of the features to visualize.  **Possible Values:** point | multipoint | polyline | polygon | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemeByName)
     */
    geometryType: string;
    /**
     * The number of unique values to include in the predominance visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemeByName)
     */
    numColors: number;
    /**
     * Determines which set of primary and secondary color schemes to return**Possible Values:** default
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemeByName)
     *
     * @default default
     */
    theme?: string;
    /**
     * Indicates if the size units of the scheme will be in meters.  This should be `true` when the scheme is intended for 3D volumetric symbology.  A `view` must be provided if this property is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemeByName)
     */
    worldScale?: boolean;
    /**
     * The SceneView instance in which the scheme  will be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
  }

  export interface predominanceGetSchemesByTagParams extends Object {
    /**
     * When provided, only schemes containing all the matching tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemesByTag)
     */
    includedTags?: string[];
    /**
     * When provided, only schemes missing all the provided tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemesByTag)
     */
    excludedTags?: string[];
    /**
     * The basemap to pair with the visualization. This  value indicates the best symbol color for visualizing features with the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemesByTag)
     */
    basemap: string | Basemap;
    /**
     * The geometry type of the features to visualize.  **Possible Values:** point | multipoint | polyline | polygon | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemesByTag)
     */
    geometryType: string;
    /**
     * The number of unique values to include in the predominance visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemesByTag)
     */
    numColors: number;
    /**
     * Determines which set of primary and secondary color schemes to return**Possible Values:** default
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemesByTag)
     *
     * @default default
     */
    theme?: string;
    /**
     * Indicates if the size units of the scheme will be in meters.  This should be `true` when the scheme is intended for 3D volumetric symbology.  A `view` must be provided if this property is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemesByTag)
     */
    worldScale?: boolean;
    /**
     * The SceneView instance in which the scheme  will be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
  }

  export interface predominanceGetSchemesParams extends Object {
    /**
     * The basemap to pair with the visualization. This  value indicates the best symbol color for visualizing features with the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemes)
     */
    basemap: string | Basemap;
    /**
     * The geometry type of the features to visualize.  **Possible Values:** point | multipoint | polyline | polygon | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemes)
     */
    geometryType: string;
    /**
     * The number of unique values to include in the predominance visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemes)
     */
    numColors: number;
    /**
     * Determines which set of primary and secondary color schemes to return**Possible Values:** default
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemes)
     *
     * @default default
     */
    theme?: string;
    /**
     * Indicates if the size units of the scheme will be in meters.  This should be `true` when the scheme is intended for 3D volumetric symbology.  A `view` must be provided if this property is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemes)
     */
    worldScale?: boolean;
    /**
     * The SceneView instance in which the scheme  will be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
  }

  /**
   * Defines the symbology scheme used to visualize predominance based on the layer's geometry type.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceScheme)
   */
  export type PredominanceScheme =
    | PredominanceSchemeForPoint
    | PredominanceSchemeForPolyline
    | PredominanceSchemeForPolygon
    | PredominanceSchemeForMesh;

  /**
   * Properties defining the symbology scheme used to visualize predominance for mesh features.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForMesh)
   */
  export interface PredominanceSchemeForMesh extends Object {
    /**
     * The unique name of the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForMesh)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForMesh)
     */
    tags: string[];
    /**
     * The fill colors of the mesh symbols used for each category.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForMesh)
     */
    colors: Color[];
    /**
     * The color of the fill symbol used to indicate  features with no data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForMesh)
     */
    noDataColor: Color;
    /**
     * The opacity of the symbol (0 - 1).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForMesh)
     */
    opacity: number;
  }

  /**
   * Properties defining the symbology scheme used to visualize predominance for point features.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPoint)
   */
  export interface PredominanceSchemeForPoint extends Object {
    /**
     * The unique name of the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPoint)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPoint)
     */
    tags: string[];
    /**
     * The fill colors of the point symbols used for each category.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPoint)
     */
    colors: Color[];
    /**
     * The color of the point symbol used to indicate  features with no data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPoint)
     */
    noDataColor: Color;
    /**
     * Properties for defining the outline of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPoint)
     */
    outline: PredominanceSchemeForPointOutline;
    /**
     * The opacity of the point symbol (0 - 1).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPoint)
     */
    opacity: number;
    /**
     * The scheme defining the size visual variable if included in a predominance visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPoint)
     */
    sizeScheme: SizeSchemeForPoint;
  }

  /**
   * Properties defining the symbology scheme used to visualize predominance for polygon features.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPolygon)
   */
  export interface PredominanceSchemeForPolygon extends Object {
    /**
     * The unique name of the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPolygon)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPolygon)
     */
    tags: string[];
    /**
     * The fill colors of the polygon symbols used for each category.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPolygon)
     */
    colors: Color[];
    /**
     * The color of the fill symbol used to indicate  features with no data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPolygon)
     */
    noDataColor: Color;
    /**
     * Properties for defining the outline of the fill symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPolygon)
     */
    outline: PredominanceSchemeForPolygonOutline;
    /**
     * The opacity of the symbol (0 - 1).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPolygon)
     */
    opacity: number;
    /**
     * The scheme defining the size visual variable if included in a predominance visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPolygon)
     */
    sizeScheme: SizeSchemeForPolygon;
  }

  /**
   * Properties defining the symbology scheme used to visualize predominance for polyline features.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPolyline)
   */
  export interface PredominanceSchemeForPolyline extends Object {
    /**
     * The unique name of the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPolyline)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPolyline)
     */
    tags: string[];
    /**
     * The colors of the line symbols used for each category.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPolyline)
     */
    colors: Color[];
    /**
     * The color of the line symbol used to indicate  features with no data and features that are out of range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPolyline)
     */
    noDataColor: Color;
    /**
     * The default width of the line symbol in pixels or points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPolyline)
     */
    width: number;
    /**
     * The opacity of the line symbol (0 - 1).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPolyline)
     */
    opacity: number;
    /**
     * The scheme defining the size visual variable if included in a predominance visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPolyline)
     */
    sizeScheme: SizeSchemeForPolyline;
  }

  /**
   * The return object of the [getSchemes()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#getSchemes) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemes)
   */
  export interface PredominanceSchemes extends Object {
    /**
     * The predominance scheme best suited for the given basemap and geometry type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemes)
     */
    primaryScheme: PredominanceScheme;
    /**
     * Additional predominance schemes that may be used to visualize data of the given geometry type overlaid on the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemes)
     */
    secondarySchemes: PredominanceScheme[];
    /**
     * The ID of the basemap associated with the given schemes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemes)
     */
    basemapId: string;
  }

  export interface PredominanceSchemeForPointOutline extends Object {
    /**
     * The outline color of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPoint)
     */
    color: Color;
    /**
     * The width of the marker symbol in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPoint)
     */
    width: number;
  }

  export interface PredominanceSchemeForPolygonOutline extends Object {
    /**
     * The outline color of the fill symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPolygon)
     */
    color: Color;
    /**
     * The width of the fill symbol's outline in pixels or points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-predominance.html#PredominanceSchemeForPolygon)
     */
    width: number;
  }

  interface symbologyRelationship {
    /**
     * Clones a relationship (bivariate color) scheme object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#cloneScheme)
     *
     * @param scheme The relationship scheme object to clone.
     *
     */
    cloneScheme(scheme: RelationshipScheme): RelationshipScheme;
    /**
     * Returns a relationship scheme with the provided name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getSchemeByName)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.name The name of the scheme to retrieve.
     * @param params.basemap The basemap to pair with the visualization. This  value indicates the best symbol colors for visualizing features with the given basemap.
     * @param params.geometryType The geometry type of the features to visualize.  **Possible Values:** point | multipoint | polyline | polygon | mesh
     * @param params.theme Determines which set of primary and secondary color schemes to return**Possible Values:** default
     * @param params.worldScale Indicates if the size units of the scheme will be in meters.  This should be `true` when the scheme is intended for 3D volumetric symbology.  A `view` must be provided if this property is set to `true`.
     * @param params.view The SceneView instance in which the scheme  will be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     */
    getSchemeByName(params: relationshipGetSchemeByNameParams): RelationshipScheme;
    /**
     * Returns a primary scheme and secondary schemes defining symbol properties for relationship-based (bivariate choropleth)data-driven visualizations in a [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html). The `basemap` parameter determines the color of thesymbols used to visualize each feature. The `geometryType` determines which type of symbol to return.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getSchemes)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.basemap The basemap to pair with the visualization. This  value indicates the best symbol colors for visualizing features with the given basemap.
     * @param params.geometryType The geometry type of the features to visualize.  **Possible Values:** point | multipoint | polyline | polygon | mesh
     * @param params.theme Determines which set of primary and secondary color schemes to return**Possible Values:** default
     * @param params.worldScale Indicates if the size units of the scheme will be in meters.  This should be `true` when the scheme is intended for 3D volumetric symbology.  A `view` must be provided if this property is set to `true`.
     * @param params.view The SceneView instance in which the scheme  will be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     */
    getSchemes(params: relationshipGetSchemesParams): RelationshipSchemes;
    /**
     * Returns an array of relationship schemes with the provided tags. These schemes define symbol properties forrelationship visualizations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getSchemesByTag)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.includedTags When provided, only schemes containing all the matching tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     * @param params.excludedTags When provided, only schemes missing all the provided tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     * @param params.basemap The basemap to pair with the visualization. This  value indicates the best symbol colors for visualizing features with the given basemap.
     * @param params.geometryType The geometry type of the features to visualize.**Possible Values:** point | multipoint | polyline | polygon | mesh
     * @param params.theme Determines which set of primary and secondary color schemes to return**Possible Values:** default
     * @param params.worldScale Indicates if the size units of the scheme will be in meters.  This should be `true` when the scheme is intended for 3D volumetric symbology.  A `view` must be provided if this property is set to `true`.
     * @param params.view The SceneView instance in which the scheme  will be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     */
    getSchemesByTag(params: relationshipGetSchemesByTagParams): RelationshipScheme[];
    /**
     * Returns metadata for the available themes. If a basemap is provided, returns themes that work bestwith the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getThemes)
     *
     * @param basemap The [Esri basemap string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap)  or object that will be used with the returned theme(s).
     *
     */
    getThemes(basemap?: string | Basemap): Theme[];
  }

  export const symbologyRelationship: symbologyRelationship;

  export interface relationshipGetSchemeByNameParams extends Object {
    /**
     * The name of the scheme to retrieve.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getSchemeByName)
     */
    name: string;
    /**
     * The basemap to pair with the visualization. This  value indicates the best symbol colors for visualizing features with the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getSchemeByName)
     */
    basemap: string | Basemap;
    /**
     * The geometry type of the features to visualize.  **Possible Values:** point | multipoint | polyline | polygon | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getSchemeByName)
     */
    geometryType: string;
    /**
     * Determines which set of primary and secondary color schemes to return**Possible Values:** default
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getSchemeByName)
     *
     * @default default
     */
    theme?: string;
    /**
     * Indicates if the size units of the scheme will be in meters.  This should be `true` when the scheme is intended for 3D volumetric symbology.  A `view` must be provided if this property is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getSchemeByName)
     */
    worldScale?: boolean;
    /**
     * The SceneView instance in which the scheme  will be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
  }

  export interface relationshipGetSchemesByTagParams extends Object {
    /**
     * When provided, only schemes containing all the matching tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getSchemesByTag)
     */
    includedTags?: string[];
    /**
     * When provided, only schemes missing all the provided tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getSchemesByTag)
     */
    excludedTags?: string[];
    /**
     * The basemap to pair with the visualization. This  value indicates the best symbol colors for visualizing features with the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getSchemesByTag)
     */
    basemap: string | Basemap;
    /**
     * The geometry type of the features to visualize.**Possible Values:** point | multipoint | polyline | polygon | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getSchemesByTag)
     */
    geometryType: string;
    /**
     * Determines which set of primary and secondary color schemes to return**Possible Values:** default
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getSchemesByTag)
     *
     * @default default
     */
    theme?: string;
    /**
     * Indicates if the size units of the scheme will be in meters.  This should be `true` when the scheme is intended for 3D volumetric symbology.  A `view` must be provided if this property is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getSchemesByTag)
     */
    worldScale?: boolean;
    /**
     * The SceneView instance in which the scheme  will be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
  }

  export interface relationshipGetSchemesParams extends Object {
    /**
     * The basemap to pair with the visualization. This  value indicates the best symbol colors for visualizing features with the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getSchemes)
     */
    basemap: string | Basemap;
    /**
     * The geometry type of the features to visualize.  **Possible Values:** point | multipoint | polyline | polygon | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getSchemes)
     */
    geometryType: string;
    /**
     * Determines which set of primary and secondary color schemes to return**Possible Values:** default
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getSchemes)
     *
     * @default default
     */
    theme?: string;
    /**
     * Indicates if the size units of the scheme will be in meters.  This should be `true` when the scheme is intended for 3D volumetric symbology.  A `view` must be provided if this property is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getSchemes)
     */
    worldScale?: boolean;
    /**
     * The SceneView instance in which the scheme  will be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
  }

  /**
   * Defines the symbology scheme used to visualize relationship renderers (bivariate color) based on the layer's geometry type.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipScheme)
   */
  export type RelationshipScheme =
    | RelationshipSchemeForPoint
    | RelationshipSchemeForPolyline
    | RelationshipSchemeForPolygon
    | RelationshipSchemeForMesh;

  /**
   * Properties defining the symbology scheme used to visualize relationship renderers (bivariate color) for mesh features.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForMesh)
   */
  export interface RelationshipSchemeForMesh extends Object {
    /**
     * The unique name of the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForMesh)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForMesh)
     */
    tags: string[];
    /**
     * The ID uniquely identifying the color scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForMesh)
     */
    id: string;
    /**
     * Defines the colors to use in each bin of the relationship visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForMesh)
     */
    colorsForClassBreaks: RelationshipSchemeForMeshColorsForClassBreaks[];
    /**
     * The color of the fill symbol used to indicate  features with no data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForMesh)
     */
    noDataColor: Color;
    /**
     * The opacity of the fill symbol (0 - 1).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForMesh)
     */
    opacity: number;
  }

  /**
   * Properties defining the symbology scheme used to visualize relationship renderers (bivariate color) for point features.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPoint)
   */
  export interface RelationshipSchemeForPoint extends Object {
    /**
     * The unique name of the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPoint)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPoint)
     */
    tags: string[];
    /**
     * The ID uniquely identifying the color scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPoint)
     */
    id: string;
    /**
     * Defines the colors to use in each bin of the relationship visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPoint)
     */
    colorsForClassBreaks: RelationshipSchemeForPointColorsForClassBreaks[];
    /**
     * The color of the point symbol used to indicate  features with no data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPoint)
     */
    noDataColor: Color;
    /**
     * Properties for defining the outline of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPoint)
     */
    outline: RelationshipSchemeForPointOutline;
    /**
     * The opacity of the point symbol (0 - 1).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPoint)
     */
    opacity: number;
    /**
     * The size of the point symbol in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPoint)
     */
    size: number;
  }

  /**
   * Properties defining the symbology scheme used to visualize relationship renderers (bivariate color) for polygon features.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolygon)
   */
  export interface RelationshipSchemeForPolygon extends Object {
    /**
     * The unique name of the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolygon)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolygon)
     */
    tags: string[];
    /**
     * The ID uniquely identifying the color scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolygon)
     */
    id: string;
    /**
     * Defines the colors to use in each bin of the relationship visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolygon)
     */
    colorsForClassBreaks: RelationshipSchemeForPolygonColorsForClassBreaks[];
    /**
     * The color of the fill symbol used to indicate  features with no data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolygon)
     */
    noDataColor: Color;
    /**
     * Properties for defining the outline of the fill symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolygon)
     */
    outline: RelationshipSchemeForPolygonOutline;
    /**
     * The opacity of the fill symbol (0 - 1).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolygon)
     */
    opacity: number;
  }

  /**
   * Properties defining the symbology scheme used to visualize relationship renderers (bivariate color) for polyline features.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolyline)
   */
  export interface RelationshipSchemeForPolyline extends Object {
    /**
     * The unique name of the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolyline)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolyline)
     */
    tags: string[];
    /**
     * The ID uniquely identifying the color scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolyline)
     */
    id: string;
    /**
     * Defines the colors to use in each bin of the relationship visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolyline)
     */
    colorsForClassBreaks: RelationshipSchemeForPolylineColorsForClassBreaks[];
    /**
     * The color of the line symbol used to indicate  features with no data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolyline)
     */
    noDataColor: Color;
    /**
     * The opacity of the line symbol (0 - 1).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolyline)
     */
    opacity: number;
    /**
     * The width of the line symbol in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolyline)
     */
    width: number;
  }

  /**
   * The return object of the [getSchemes()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#getSchemes) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemes)
   */
  export interface RelationshipSchemes extends Object {
    /**
     * The relationship scheme best suited for the given basemap and geometry type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemes)
     */
    primaryScheme: RelationshipScheme;
    /**
     * Additional relationship schemes that may be used to visualize data of the given geometry type overlaid on the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemes)
     */
    secondarySchemes: RelationshipScheme[];
    /**
     * The ID of the basemap associated with the given schemes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemes)
     */
    basemapId: string;
  }

  export interface RelationshipSchemeForMeshColorsForClassBreaks extends Object {
    /**
     * The colors of the fill symbols used for each bin in the relationship visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForMesh)
     */
    colors: Color[][];
    /**
     * The number of breaks (rows/columns) for each variable in the relationship visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForMesh)
     */
    numClasses: number;
  }

  export interface RelationshipSchemeForPointColorsForClassBreaks extends Object {
    /**
     * The fill colors of the point symbols used for each bin in the relationship visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPoint)
     */
    colors: Color[][];
    /**
     * The number of breaks (rows/columns) for each variable in the relationship visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPoint)
     */
    numClasses: number;
  }

  export interface RelationshipSchemeForPointOutline extends Object {
    /**
     * The outline color of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPoint)
     */
    color: Color;
    /**
     * The width of the outline in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPoint)
     */
    width: number;
  }

  export interface RelationshipSchemeForPolygonColorsForClassBreaks extends Object {
    /**
     * The colors of the fill symbols used for each bin in the relationship visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolygon)
     */
    colors: Color[][];
    /**
     * The number of breaks (rows/columns) for each variable in the relationship visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolygon)
     */
    numClasses: number;
  }

  export interface RelationshipSchemeForPolygonOutline extends Object {
    /**
     * The outline color of the fill symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolygon)
     */
    color: Color;
    /**
     * The width of the outline in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolygon)
     */
    width: number;
  }

  export interface RelationshipSchemeForPolylineColorsForClassBreaks extends Object {
    /**
     * The colors of the line symbols used for each bin in the relationship visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolyline)
     */
    colors: Color[][];
    /**
     * The number of breaks (rows/columns) for each variable in the relationship visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-relationship.html#RelationshipSchemeForPolyline)
     */
    numClasses: number;
  }

  interface symbologySize {
    /**
     * Clones a size scheme object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#cloneScheme)
     *
     * @param scheme The SizeScheme object to clone.
     *
     */
    cloneScheme(scheme: SizeScheme): SizeScheme;
    /**
     * Returns a primary scheme and secondary schemes defining symbol properties for size-baseddata-driven visualizions ina [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html). The `basemap` parameter determines the color of thegraphics used to visualize each feature. The `geometryType` determines which type of symbol to return.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#getSchemes)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.basemap The basemap to pair with the visualization. Thisvalue indicates the best symbol color for visualizing features against the given basemap.
     * @param params.geometryType The geometry type of the features to visualize.**Possible Values:** point | multipoint | polyline | polygon
     * @param params.view The SceneView instance in which the schemewill be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     * @param params.worldScale Indicates if the size units of the scheme will be in meters.This should be `true` when the scheme is intended for 3D volumetric symbology.A `view` must be provided if this property is set to `true`.
     *
     */
    getSchemes(params: sizeGetSchemesParams): SizeSchemes;
    /**
     * Returns metadata for the available themes. If a basemap is provided, returns themes that work bestwith the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#getThemes)
     *
     * @param basemap The [Esri basemap string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap)  or object that will be used with the returned theme(s).
     *
     */
    getThemes(basemap?: string | Basemap): Theme[];
  }

  export const symbologySize: symbologySize;

  export interface sizeGetSchemesParams extends Object {
    /**
     * The basemap to pair with the visualization. Thisvalue indicates the best symbol color for visualizing features against the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#getSchemes)
     */
    basemap: string | Basemap;
    /**
     * The geometry type of the features to visualize.**Possible Values:** point | multipoint | polyline | polygon
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#getSchemes)
     */
    geometryType: string;
    /**
     * The SceneView instance in which the schemewill be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
    /**
     * Indicates if the size units of the scheme will be in meters.This should be `true` when the scheme is intended for 3D volumetric symbology.A `view` must be provided if this property is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#getSchemes)
     */
    worldScale?: boolean;
  }

  /**
   * Properties defining the symbology scheme used to visualize features with attribute data-driven size.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeScheme)
   */
  export type SizeScheme = SizeSchemeForPoint | SizeSchemeForPolyline | SizeSchemeForPolygon;

  /**
   * Properties defining the symbology scheme used to visualize point features driven by attribute data.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPoint)
   */
  export interface SizeSchemeForPoint extends Object {
    /**
     * The fill color of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPoint)
     */
    color: Color;
    /**
     * The color of the marker symbol used to indicatefeatures with no data and features that are out of range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPoint)
     */
    noDataColor: Color;
    /**
     * Properties for defining the outline of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPoint)
     */
    outline: SizeSchemeForPointOutline;
    /**
     * The default size of the marker symbol in pixels or points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPoint)
     */
    size: number;
    /**
     * The size of the marker symbol (in pixels or points) used to indicatefeatures with no data and features that are out of range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPoint)
     */
    noDataSize: number;
    /**
     * The minimum size of a marker symbol in pixels or points representing featureswith low data values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPoint)
     */
    minSize: number;
    /**
     * The maximum size of a marker symbol in pixels or points representing featureswith high data values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPoint)
     */
    maxSize: number;
    /**
     * The opacity of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPoint)
     */
    opacity: number;
  }

  /**
   * Properties defining the symbology scheme used to visualize polygon features driven by attribute data.When visualized by size, polygons are represented with marker symbols.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPolygon)
   */
  export interface SizeSchemeForPolygon extends Object {
    /**
     * The scheme defining the symbology of the marker symbol used to represent polygon features by size.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPolygon)
     */
    marker: SizeSchemeForPoint;
    /**
     * The schema defining the backgound symbol of the feature. This is a fill symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPolygon)
     */
    background: SizeSchemeForPolygonBackground;
    /**
     * The opacity of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPolygon)
     */
    opacity: number;
  }

  /**
   * Properties defining the symbology scheme used to visualize polyline features driven by attribute data.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPolyline)
   */
  export interface SizeSchemeForPolyline extends Object {
    /**
     * The color of the line symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPolyline)
     */
    color: Color;
    /**
     * The color of the line symbol used to indicatefeatures with no data and features that are out of range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPolyline)
     */
    noDataColor: Color;
    /**
     * The default width of the line symbol in pixels or points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPolyline)
     */
    width: number;
    /**
     * The width of the line symbol in pixels or points used to indicatefeatures with no data and features that are out of range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPolyline)
     */
    noDataWidth: number;
    /**
     * The minimum width of a line symbol in pixels or points representing featureswith low data values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPolyline)
     */
    minWidth: number;
    /**
     * The maximum width of a line symbol in pixels or points representing featureswith high data values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPolyline)
     */
    maxWidth: number;
    /**
     * The opacity of the line symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPolyline)
     */
    opacity: number;
  }

  /**
   * The return object of the [getSchemes()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#getSchemes) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemes)
   */
  export interface SizeSchemes extends Object {
    /**
     * The size scheme best suited for the given basemap and geometry type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemes)
     */
    primaryScheme: SizeScheme;
    /**
     * Additional size schemes that may be used to visualize data of the given geometry type overlaid on the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemes)
     */
    secondarySchemes: SizeScheme[];
    /**
     * The ID of the basemap associated with the given schemes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemes)
     */
    basemapId: string;
  }

  export interface SizeSchemeForPointOutline extends Object {
    /**
     * The outline color of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPoint)
     */
    color: Color;
    /**
     * The width of the marker symbol in pixels or points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPoint)
     */
    width: number;
  }

  export interface SizeSchemeForPolygonBackground extends Object {
    /**
     * The color of the fill symbol representing the polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPolygon)
     */
    color: Color;
    /**
     * Properties for defining the outline of the background fill symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPolygon)
     */
    outline: SizeSchemeForPolygonBackgroundOutline;
  }

  export interface SizeSchemeForPolygonBackgroundOutline extends Object {
    /**
     * The outline color of the background fill symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPolygon)
     */
    color: Color;
    /**
     * The width of the background fill symbol's outline in pixels or points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-size.html#SizeSchemeForPolygon)
     */
    width: number;
  }

  interface symbologyType {
    /**
     * Clones a type scheme object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#cloneScheme)
     *
     * @param scheme The type scheme object to clone.
     *
     */
    cloneScheme(scheme: TypeScheme): TypeScheme;
    /**
     * Returns a type scheme with the provided name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getSchemeByName)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.name The name of the scheme to retrieve.
     * @param params.basemap The basemap to pair with the visualization. Thisvalue indicates the best symbol color for visualizing features with the given basemap.
     * @param params.geometryType The geometry type of the features to visualize.**Possible Values:** point | multipoint | polyline | polygon | mesh
     * @param params.theme Determines whether to return a standardized  unique valuescheme for point cloud class renderers (i.e. when the `CLASS_CODE` field is driving the visualization in a[PointCloudLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html)), or to return the other default primary schemesused in other unique value renderers generated for non-point cloud layer types.**Possible Values:** point-cloud-class | default
     * @param params.worldScale Indicates if the size units of the scheme will be in meters.This should be `true` when the scheme is intended for 3D volumetric symbology.A `view` must be provided if this property is set to `true`.
     * @param params.view The SceneView instance in which the schemewill be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     */
    getSchemeByName(params: typeGetSchemeByNameParams): TypeScheme;
    /**
     * Returns a primary scheme and secondary schemes defining symbol properties for type-baseddata-driven visualizations ina [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html). The `basemap` parameter determines the color of thegraphics used to visualize each feature. The `geometryType` determines which type of symbol to return.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getSchemes)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.basemap The basemap to pair with the visualization. Thisvalue indicates the best symbol color for visualizing features with the given basemap.
     * @param params.geometryType The geometry type of the features to visualize.**Possible Values:** point | multipoint | polyline | polygon | mesh
     * @param params.theme Determines whether to return a standardized  unique valuescheme for point cloud class renderers (i.e. when the `CLASS_CODE` field is driving the visualization in a[PointCloudLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html)), or to return the other default primary schemesused in other unique value renderers generated for non-point cloud layer types.**Possible Values:** point-cloud-class | default
     * @param params.worldScale Indicates if the size units of the scheme will be in meters.This should be `true` when the scheme is intended for 3D volumetric symbology.A `view` must be provided if this property is set to `true`.
     * @param params.view The SceneView instance in which the schemewill be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     */
    getSchemes(params: typeGetSchemesParams): TypeSchemes;
    /**
     * Returns an array of type schemes with the provided tags. These schemes define symbol properties fordata-driven visualizations in any layer that can be rendered with a [UniqueValueRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getSchemesByTag)
     *
     * @param params See the table below for details of each parameter that may be passed to this function.
     * @param params.includedTags When provided, only schemes containing all the matching tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     * @param params.excludedTags When provided, only schemes missing all the provided tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     * @param params.basemap The basemap to pair with the visualization. Thisvalue indicates the best symbol color for visualizing features with the given basemap.
     * @param params.geometryType The geometry type of the features to visualize.**Possible Values:** point | multipoint | polyline | polygon | mesh
     * @param params.theme Determines whether to return a standardized  unique valuescheme for point cloud class renderers (i.e. when the `CLASS_CODE` field is driving the visualization in a[PointCloudLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html)), or to return the other default primary schemesused in other unique value renderers generated for non-point cloud layer types.**Possible Values:** point-cloud-class | default
     * @param params.worldScale Indicates if the size units of the scheme will be in meters.This should be `true` when the scheme is intended for 3D volumetric symbology.A `view` must be provided if this property is set to `true`.
     * @param params.view The SceneView instance in which the schemewill be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     */
    getSchemesByTag(params: typeGetSchemesByTagParams): TypeScheme[];
    /**
     * Returns metadata for the available themes. If a basemap is provided, returns themes that work bestwith the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getThemes)
     *
     * @param basemap The [Esri basemap string](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap)  or object that will be used with the returned theme(s).
     *
     */
    getThemes(basemap?: string | Basemap): Theme[];
  }

  export const symbologyType: symbologyType;

  export interface typeGetSchemeByNameParams extends Object {
    /**
     * The name of the scheme to retrieve.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getSchemeByName)
     */
    name: string;
    /**
     * The basemap to pair with the visualization. Thisvalue indicates the best symbol color for visualizing features with the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getSchemeByName)
     */
    basemap: string | Basemap;
    /**
     * The geometry type of the features to visualize.**Possible Values:** point | multipoint | polyline | polygon | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getSchemeByName)
     */
    geometryType: string;
    /**
     * Determines whether to return a standardized  unique valuescheme for point cloud class renderers (i.e. when the `CLASS_CODE` field is driving the visualization in a[PointCloudLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html)), or to return the other default primary schemesused in other unique value renderers generated for non-point cloud layer types.**Possible Values:** point-cloud-class | default
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getSchemeByName)
     *
     * @default default
     */
    theme?: string;
    /**
     * Indicates if the size units of the scheme will be in meters.This should be `true` when the scheme is intended for 3D volumetric symbology.A `view` must be provided if this property is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getSchemeByName)
     */
    worldScale?: boolean;
    /**
     * The SceneView instance in which the schemewill be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
  }

  export interface typeGetSchemesByTagParams extends Object {
    /**
     * When provided, only schemes containing all the matching tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getSchemesByTag)
     */
    includedTags?: string[];
    /**
     * When provided, only schemes missing all the provided tags will be returned.**Known Tags:** light | dark | reds | yellows | oranges | greens | blues | purples | pinks | browns | grays |bright | subdued | deuteranopia | protanopia | tritanopia | grayscale | types | dot-density
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getSchemesByTag)
     */
    excludedTags?: string[];
    /**
     * The basemap to pair with the visualization. Thisvalue indicates the best symbol color for visualizing features with the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getSchemesByTag)
     */
    basemap: string | Basemap;
    /**
     * The geometry type of the features to visualize.**Possible Values:** point | multipoint | polyline | polygon | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getSchemesByTag)
     */
    geometryType: string;
    /**
     * Determines whether to return a standardized  unique valuescheme for point cloud class renderers (i.e. when the `CLASS_CODE` field is driving the visualization in a[PointCloudLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html)), or to return the other default primary schemesused in other unique value renderers generated for non-point cloud layer types.**Possible Values:** point-cloud-class | default
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getSchemesByTag)
     *
     * @default default
     */
    theme?: string;
    /**
     * Indicates if the size units of the scheme will be in meters.This should be `true` when the scheme is intended for 3D volumetric symbology.A `view` must be provided if this property is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getSchemesByTag)
     */
    worldScale?: boolean;
    /**
     * The SceneView instance in which the schemewill be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
  }

  export interface typeGetSchemesParams extends Object {
    /**
     * The basemap to pair with the visualization. Thisvalue indicates the best symbol color for visualizing features with the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getSchemes)
     */
    basemap: string | Basemap;
    /**
     * The geometry type of the features to visualize.**Possible Values:** point | multipoint | polyline | polygon | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getSchemes)
     */
    geometryType: string;
    /**
     * Determines whether to return a standardized  unique valuescheme for point cloud class renderers (i.e. when the `CLASS_CODE` field is driving the visualization in a[PointCloudLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html)), or to return the other default primary schemesused in other unique value renderers generated for non-point cloud layer types.**Possible Values:** point-cloud-class | default
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getSchemes)
     *
     * @default default
     */
    theme?: string;
    /**
     * Indicates if the size units of the scheme will be in meters.This should be `true` when the scheme is intended for 3D volumetric symbology.A `view` must be provided if this property is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getSchemes)
     */
    worldScale?: boolean;
    /**
     * The SceneView instance in which the schemewill be used. This property is only applicable when the scheme will be used in conjunction with 3D symbols.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
  }

  /**
   * Properties defining the symbology scheme used to visualize features with attribute data-driven types.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeScheme)
   */
  export type TypeScheme = TypeSchemeForPoint | TypeSchemeForPolyline | TypeSchemeForPolygon | TypeSchemeForMesh;

  /**
   * Properties defining the symbology scheme used to visualize mesh features driven by type-based attribute data.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForMesh)
   */
  export interface TypeSchemeForMesh extends Object {
    /**
     * The unique name of the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForMesh)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForMesh)
     */
    tags: string[];
    /**
     * The fill colors of the symbols comprising the theme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForMesh)
     */
    colors: Color[];
    /**
     * The color of the fill symbol used to indicatefeatures with no data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForMesh)
     */
    noDataColor: Color;
    /**
     * The opacity of the symbol (0 - 1).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForMesh)
     */
    opacity: number;
  }

  /**
   * Properties defining the symbology scheme used to visualize point features driven by type-based attribute data.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPoint)
   */
  export interface TypeSchemeForPoint extends Object {
    /**
     * The unique name of the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPoint)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPoint)
     */
    tags: string[];
    /**
     * The fill colors of the point symbols comprising the theme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPoint)
     */
    colors: Color[];
    /**
     * The color of the point symbol used to indicatefeatures with no data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPoint)
     */
    noDataColor: Color;
    /**
     * Properties for defining the outline of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPoint)
     */
    outline: TypeSchemeForPointOutline;
    /**
     * The default size of the point symbol in pixels, points, or real-world units.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPoint)
     */
    size: number;
    /**
     * The opacity of the point symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPoint)
     */
    opacity: number;
  }

  /**
   * Properties defining the symbology scheme used to visualize polygon features driven by type-based attribute data.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPolygon)
   */
  export interface TypeSchemeForPolygon extends Object {
    /**
     * The unique name of the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPolygon)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPolygon)
     */
    tags: string[];
    /**
     * The fill colors of the symbols comprising the theme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPolygon)
     */
    colors: Color[];
    /**
     * The color of the fill symbol used to indicatefeatures with no data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPolygon)
     */
    noDataColor: Color;
    /**
     * Properties for defining the outline of the fill symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPolygon)
     */
    outline: TypeSchemeForPolygonOutline;
    /**
     * The opacity of the symbol (0 - 1).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPolygon)
     */
    opacity: number;
  }

  /**
   * Properties defining the symbology scheme used to visualize polyline features driven by type-based attribute data.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPolyline)
   */
  export interface TypeSchemeForPolyline extends Object {
    /**
     * The unique name of the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPolyline)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPolyline)
     */
    tags: string[];
    /**
     * The colors of the line symbols comprising the theme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPolyline)
     */
    colors: Color[];
    /**
     * The color of the line symbol used to indicatefeatures with no data and features that are out of range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPolyline)
     */
    noDataColor: Color;
    /**
     * The default width of the line symbol in pixels or points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPolyline)
     */
    width: number;
    /**
     * The opacity of the line symbol (0 - 1).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPolyline)
     */
    opacity: number;
  }

  /**
   * The return object of the [getSchemes()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#getSchemes) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemes)
   */
  export interface TypeSchemes extends Object {
    /**
     * The type scheme best suited for the given basemap and geometry type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemes)
     */
    primaryScheme: TypeScheme;
    /**
     * Additional type schemes that may be used to visualize data of the given geometry type overlaid on the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemes)
     */
    secondarySchemes: TypeScheme[];
    /**
     * The ID of the basemap associated with the given schemes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemes)
     */
    basemapId: string;
  }

  export interface TypeSchemeForPointOutline extends Object {
    /**
     * The outline color of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPoint)
     */
    color: Color;
    /**
     * The width of the marker symbol in pixels or points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPoint)
     */
    width: number;
  }

  export interface TypeSchemeForPolygonOutline extends Object {
    /**
     * The outline color of the fill symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPolygon)
     */
    color: Color;
    /**
     * The width of the fill symbol's outline in pixels or points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-symbology-type.html#TypeSchemeForPolygon)
     */
    width: number;
  }

  interface StretchRenderer extends Renderer {
    /**
     * The stretched values are mapped to this specified color ramp.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#colorRamp)
     */
    colorRamp: ColorRamp;
    /**
     * The computeGamma automatically calculates best gamma value to render exported image based on empirical model.This is applicable to any stretch type when [useGamma](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#useGamma) is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#computeGamma)
     */
    computeGamma: boolean;
    /**
     * When Dynamic Range Adjustment is `true`, the statistics based on the current display extentare calculated as you zoom and pan around the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#dynamicRangeAdjustment)
     */
    dynamicRangeAdjustment: boolean;
    /**
     * The gamma values to be used if [useGamma](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#useGamma) is set to `false`.Gamma refers to the degree of contrast between the mid-level gray values of a raster dataset.Gamma does not affect the black or white values in a raster dataset, only the middle values.By applying a gamma correction, you can control the overall brightness of an [ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#gamma)
     */
    gamma: number[];
    /**
     * Applicable when [stretchType](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#stretchType) is percent-clip.Specifies the percentage of the highest values to exclude from the stretch.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#maxPercent)
     */
    maxPercent: number;
    /**
     * Applicable when [stretchType](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#stretchType) is percent-clip.Specifies the percentage of the lowest values to exclude from the stretch.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#minPercent)
     */
    minPercent: number;
    /**
     * Applicable when [stretchType](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#stretchType) is standard-deviation.Specifies the number of standard deviations to use. The values beyond the number of standard deviationsbecome the [outputMin](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMin) and [outputMax](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMax). The remaining values are linearly stretched between [outputMin](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMin) and [outputMax](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMax).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#numberOfStandardDeviations)
     */
    numberOfStandardDeviations: number;
    /**
     * The outputMax denotes the Output Maximum, which is the highest pixel value for the histogram.The [outputMin](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMin) and [outputMax](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMax) will set the range of values that will then be linearly contrast stretched.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMax)
     */
    outputMax: number;
    /**
     * The outputMin denotes the Output Minimum, which is the lowest pixel value for the histogram.The [outputMin](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMin) and [outputMax](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMax) will set the range of values that will then be linearly contrast stretched.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMin)
     */
    outputMin: number;
    /**
     * The Strength Level determines how much of the sigmoidal function will be used in the stretch.A low value such as 1 will only use the middle portion of the curve,which tends to produce dull and faint colors. A high value such as 6 will use the entire curve,which tends to produce bold and sharp colors.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#sigmoidStrengthLevel)
     */
    sigmoidStrengthLevel: number;
    /**
     * The stretch type defines a histogram stretch that will be applied to the rasters to enhance their appearance.Stretching improves the appearance of the data by spreading the pixel values along a histogramfrom the minimum and maximum values defined by their bit depth.For example, an 8-bit raster dataset or mosaic dataset will be stretched from 0 to 255.Different stretches will produce different results in the raster display.The possible stretch types are listed below.Value | Description------|------------none  | No stretch method will be applied, even if statistics exist.standard-deviation | This stretch type applies a linear stretch between the values defined by the standard deviation value.histogram-equalization | The pixel values are stretched to adjust the contrast using the histogram of the data.min-max | This stretch type applies a linear stretch based on the output minimum and output maximum pixel values, which are used as the endpoints for the histogram.percent-clip | This stretch type applies a linear stretch between the defined [minPercent](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#minPercent) and [maxPercent](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#maxPercent) pixel values.sigmoid | The Sigmoid contrast stretch is designed to highlight moderate pixel values in your imagery while maintaining sufficient contrast at the extremes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#stretchType)
     *
     * @default none
     */
    stretchType: string;
    /**
     * The type of Renderer. For StretchRenderer this value is always `raster-stretch`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#type)
     */
    readonly type: "raster-stretch";
    /**
     * Denotes wether the [gamma](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#gamma) value should be used. When `useGamma` is `false`, the gamma iscalculated from the statistics and histogram of the data.The [gamma](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#gamma) property is required if `useGamma` is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#useGamma)
     */
    useGamma: boolean;
  }

  interface StretchRendererConstructor {
    new (properties?: StretchRendererProperties): StretchRenderer;

    fromJSON(json: any): StretchRenderer;
  }

  export const StretchRenderer: StretchRendererConstructor;

  interface StretchRendererProperties extends RendererProperties {
    /**
     * The stretched values are mapped to this specified color ramp.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#colorRamp)
     */
    colorRamp?: ColorRampProperties;
    /**
     * The computeGamma automatically calculates best gamma value to render exported image based on empirical model.This is applicable to any stretch type when [useGamma](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#useGamma) is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#computeGamma)
     */
    computeGamma?: boolean;
    /**
     * When Dynamic Range Adjustment is `true`, the statistics based on the current display extentare calculated as you zoom and pan around the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#dynamicRangeAdjustment)
     */
    dynamicRangeAdjustment?: boolean;
    /**
     * The gamma values to be used if [useGamma](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#useGamma) is set to `false`.Gamma refers to the degree of contrast between the mid-level gray values of a raster dataset.Gamma does not affect the black or white values in a raster dataset, only the middle values.By applying a gamma correction, you can control the overall brightness of an [ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#gamma)
     */
    gamma?: number[];
    /**
     * Applicable when [stretchType](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#stretchType) is percent-clip.Specifies the percentage of the highest values to exclude from the stretch.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#maxPercent)
     */
    maxPercent?: number;
    /**
     * Applicable when [stretchType](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#stretchType) is percent-clip.Specifies the percentage of the lowest values to exclude from the stretch.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#minPercent)
     */
    minPercent?: number;
    /**
     * Applicable when [stretchType](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#stretchType) is standard-deviation.Specifies the number of standard deviations to use. The values beyond the number of standard deviationsbecome the [outputMin](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMin) and [outputMax](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMax). The remaining values are linearly stretched between [outputMin](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMin) and [outputMax](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMax).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#numberOfStandardDeviations)
     */
    numberOfStandardDeviations?: number;
    /**
     * The outputMax denotes the Output Maximum, which is the highest pixel value for the histogram.The [outputMin](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMin) and [outputMax](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMax) will set the range of values that will then be linearly contrast stretched.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMax)
     */
    outputMax?: number;
    /**
     * The outputMin denotes the Output Minimum, which is the lowest pixel value for the histogram.The [outputMin](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMin) and [outputMax](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMax) will set the range of values that will then be linearly contrast stretched.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#outputMin)
     */
    outputMin?: number;
    /**
     * The Strength Level determines how much of the sigmoidal function will be used in the stretch.A low value such as 1 will only use the middle portion of the curve,which tends to produce dull and faint colors. A high value such as 6 will use the entire curve,which tends to produce bold and sharp colors.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#sigmoidStrengthLevel)
     */
    sigmoidStrengthLevel?: number;
    /**
     * The stretch type defines a histogram stretch that will be applied to the rasters to enhance their appearance.Stretching improves the appearance of the data by spreading the pixel values along a histogramfrom the minimum and maximum values defined by their bit depth.For example, an 8-bit raster dataset or mosaic dataset will be stretched from 0 to 255.Different stretches will produce different results in the raster display.The possible stretch types are listed below.Value | Description------|------------none  | No stretch method will be applied, even if statistics exist.standard-deviation | This stretch type applies a linear stretch between the values defined by the standard deviation value.histogram-equalization | The pixel values are stretched to adjust the contrast using the histogram of the data.min-max | This stretch type applies a linear stretch based on the output minimum and output maximum pixel values, which are used as the endpoints for the histogram.percent-clip | This stretch type applies a linear stretch between the defined [minPercent](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#minPercent) and [maxPercent](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#maxPercent) pixel values.sigmoid | The Sigmoid contrast stretch is designed to highlight moderate pixel values in your imagery while maintaining sufficient contrast at the extremes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#stretchType)
     *
     * @default none
     */
    stretchType?: string;
    /**
     * Denotes wether the [gamma](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#gamma) value should be used. When `useGamma` is `false`, the gamma iscalculated from the statistics and histogram of the data.The [gamma](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#gamma) property is required if `useGamma` is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-StretchRenderer.html#useGamma)
     */
    useGamma?: boolean;
  }

  interface AttributeColorInfo extends Accessor, JSONSupport {
    /**
     * The color used to render dots representing the given [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#field).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#color)
     */
    color: Color;
    /**
     * The name of the numeric attribute field to represent with dots withthe reference dot value provided to the [DotDensityRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#dotValue).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#field)
     */
    field: string;
    /**
     * The label used to describe the field or attribute in the[Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#label)
     */
    label: string;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression evaluating to a number.This expression can reference field values using the `$feature` global variableand perform mathematical calculations and logical evaluations at runtime. The values returned fromthis expression are the data used to drive the visualization. This takes precedence over [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#field).Therefore, this property is typically used as an alternative to [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#field).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#valueExpression)
     */
    valueExpression: string;
    /**
     * The title identifying and describing the associated[Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression as defined in the [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#valueExpression) property. This is displayedas the label of the attribute in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) in the absence of oneprovided in the [label](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#label) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#valueExpressionTitle)
     */
    valueExpressionTitle: string;

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#clone)
     *
     *
     */
    clone(): AttributeColorInfo;
  }

  interface AttributeColorInfoConstructor {
    new (properties?: AttributeColorInfoProperties): AttributeColorInfo;

    fromJSON(json: any): AttributeColorInfo;
  }

  export const AttributeColorInfo: AttributeColorInfoConstructor;

  interface AttributeColorInfoProperties {
    /**
     * The color used to render dots representing the given [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#field).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#color)
     */
    color?: Color | number[] | string;
    /**
     * The name of the numeric attribute field to represent with dots withthe reference dot value provided to the [DotDensityRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#dotValue).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#field)
     */
    field?: string;
    /**
     * The label used to describe the field or attribute in the[Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#label)
     */
    label?: string;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression evaluating to a number.This expression can reference field values using the `$feature` global variableand perform mathematical calculations and logical evaluations at runtime. The values returned fromthis expression are the data used to drive the visualization. This takes precedence over [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#field).Therefore, this property is typically used as an alternative to [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#field).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#valueExpression)
     */
    valueExpression?: string;
    /**
     * The title identifying and describing the associated[Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression as defined in the [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#valueExpression) property. This is displayedas the label of the attribute in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) in the absence of oneprovided in the [label](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#label) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#valueExpressionTitle)
     */
    valueExpressionTitle?: string;
  }

  interface AuthoringInfo extends Accessor, JSONSupport {
    /**
     * Indicates which classification method was used if aclassed color or classed size renderer was generated using one of the Smart Mapping functions.**Possible Values:** equal-interval | manual | natural-breaks | quantile | standard-deviation
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#classificationMethod)
     */
    classificationMethod: string;
    /**
     * Indicates the color ramp was used to create the symbols for Unique Value or Class Breaks renderer for Imagery Layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#colorRamp)
     */
    colorRamp: ColorRamp;
    /**
     * A numeric field used for generating a [relationship renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html)along with [field2](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field2). In the default visualization,  the values of this field are rendered along the vertical axis of the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field1)
     */
    field1: AuthoringInfoField1;
    /**
     * A numeric field used for generating a [relationship renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html)along with [field1](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field1). In the default visualization,  the values of this field are rendered along the horizontal axis of the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field2)
     */
    field2: AuthoringInfoField2;
    /**
     * An array of string values representing field names used for creating a [predominance renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#fields)
     */
    fields: string[];
    /**
     * The focus of a [relationship renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html). Thisdetermines the orientation of the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#focus)
     */
    focus: string;
    /**
     * **Only applicable to renderer used in web scenes.** Indicates the unit used in real-world sizes.**Possible Values:** inches | feet | yards | miles | nautical-miles | millimeters | centimeters | decimeters | meters | kilometers | decimal-degrees
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#lengthUnit)
     */
    lengthUnit: string;
    /**
     * Indicates the value of the upper handle if a slider was used to generate the dot value for dot density renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#maxSliderValue)
     */
    maxSliderValue: number;
    /**
     * Indicates the value of the lower handle if a slider was used to generate the dot value for dot density renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#minSliderValue)
     */
    minSliderValue: number;
    /**
     * The number of classes used to classify each field of a [relationship renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html). Thisdetermines the number of categories in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#numClasses)
     */
    numClasses: number;
    /**
     * Indicates the standard deviation interval for each stop in a classed color orclassed size renderer that was generated using the `standard-deviation` classification method.**Possible Values:** 0.25 | 0.33 | 0.5 | 1
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#standardDeviationInterval)
     */
    standardDeviationInterval: number;
    /**
     * Indicates the renderer type generated from one of the Smart Mapping functions.**Possible Values:** class-breaks-size | class-breaks-color | classed-color | classed-size | predominance | relationship | univariate-color-size
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#type)
     */
    type: string;
    /**
     * Contains authoring properties of visual variables generated fromone of the Smart Mapping methods or sliders.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#visualVariables)
     */
    visualVariables: AuthoringInfoVisualVariable[];

    /**
     * Creates a deep clone of the instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#clone)
     *
     *
     */
    clone(): AuthoringInfo;
  }

  interface AuthoringInfoConstructor {
    new (properties?: AuthoringInfoProperties): AuthoringInfo;

    fromJSON(json: any): AuthoringInfo;
  }

  export const AuthoringInfo: AuthoringInfoConstructor;

  interface AuthoringInfoProperties {
    /**
     * Indicates which classification method was used if aclassed color or classed size renderer was generated using one of the Smart Mapping functions.**Possible Values:** equal-interval | manual | natural-breaks | quantile | standard-deviation
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#classificationMethod)
     */
    classificationMethod?: string;
    /**
     * Indicates the color ramp was used to create the symbols for Unique Value or Class Breaks renderer for Imagery Layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#colorRamp)
     */
    colorRamp?: ColorRampProperties;
    /**
     * A numeric field used for generating a [relationship renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html)along with [field2](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field2). In the default visualization,  the values of this field are rendered along the vertical axis of the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field1)
     */
    field1?: AuthoringInfoField1;
    /**
     * A numeric field used for generating a [relationship renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html)along with [field1](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field1). In the default visualization,  the values of this field are rendered along the horizontal axis of the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field2)
     */
    field2?: AuthoringInfoField2;
    /**
     * An array of string values representing field names used for creating a [predominance renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-predominance.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#fields)
     */
    fields?: string[];
    /**
     * The focus of a [relationship renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html). Thisdetermines the orientation of the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#focus)
     */
    focus?: string;
    /**
     * **Only applicable to renderer used in web scenes.** Indicates the unit used in real-world sizes.**Possible Values:** inches | feet | yards | miles | nautical-miles | millimeters | centimeters | decimeters | meters | kilometers | decimal-degrees
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#lengthUnit)
     */
    lengthUnit?: string;
    /**
     * Indicates the value of the upper handle if a slider was used to generate the dot value for dot density renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#maxSliderValue)
     */
    maxSliderValue?: number;
    /**
     * Indicates the value of the lower handle if a slider was used to generate the dot value for dot density renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#minSliderValue)
     */
    minSliderValue?: number;
    /**
     * The number of classes used to classify each field of a [relationship renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-relationship.html). Thisdetermines the number of categories in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#numClasses)
     */
    numClasses?: number;
    /**
     * Indicates the standard deviation interval for each stop in a classed color orclassed size renderer that was generated using the `standard-deviation` classification method.**Possible Values:** 0.25 | 0.33 | 0.5 | 1
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#standardDeviationInterval)
     */
    standardDeviationInterval?: number;
    /**
     * Indicates the renderer type generated from one of the Smart Mapping functions.**Possible Values:** class-breaks-size | class-breaks-color | classed-color | classed-size | predominance | relationship | univariate-color-size
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#type)
     */
    type?: string;
    /**
     * Contains authoring properties of visual variables generated fromone of the Smart Mapping methods or sliders.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#visualVariables)
     */
    visualVariables?: AuthoringInfoVisualVariableProperties[];
  }

  export interface AuthoringInfoField1 extends Object {
    /**
     * The name of a numeric field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field1)
     */
    field: string;
    /**
     * The name of a numeric field used to normalize the given `field`. In choropleth visualizations  it is best practice to normalize your data values if they haven't already been normalized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field1)
     */
    normalizationField?: string;
    /**
     * Describes the class breaks generated for this field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field1)
     */
    classBreakInfos?: AuthoringInfoField1ClassBreakInfos[];
  }

  export interface AuthoringInfoField1ClassBreakInfos extends Object {
    /**
     * The maximum bound of values to visualize in the given field. If a feature's value is greater than  this value, then it will be assigned the default symbol of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field1)
     */
    maxValue?: number;
    /**
     * The minimum bound of values to visualize in the given field. If a feature's value is less than  this value, then it will be assigned the default symbol of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field1)
     */
    minValue?: number;
  }

  export interface AuthoringInfoField2 extends Object {
    /**
     * The name of a numeric field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field2)
     */
    field: string;
    /**
     * The name of a numeric field used to normalize the given `field`. In choropleth visualizations  it is best practice to normalize your data values if they haven't already been normalized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field2)
     */
    normalizationField?: string;
    /**
     * Describes the class breaks generated for this field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field2)
     */
    classBreakInfos?: AuthoringInfoField2ClassBreakInfos[];
  }

  export interface AuthoringInfoField2ClassBreakInfos extends Object {
    /**
     * The maximum bound of values to visualize in the given field. If a feature's value is greater than  this value, then it will be assigned the default symbol of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field2)
     */
    maxValue?: number;
    /**
     * The minimum bound of values to visualize in the given field. If a feature's value is less than  this value, then it will be assigned the default symbol of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field2)
     */
    minValue?: number;
  }

  interface AuthoringInfoVisualVariable extends Accessor, JSONSupport {
    /**
     * If an age or timeline renderer was generated, indicates the endtime of the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#endTime)
     */
    endTime: string | number;
    /**
     * Indicates the field name used for generating the data-driven visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#field)
     */
    field: string;
    /**
     * Indicates the value of the upper handle if a slider was used to generate the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#maxSliderValue)
     */
    maxSliderValue: number;
    /**
     * Indicates the value of the lower handle if a slider was used to generate the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#minSliderValue)
     */
    minSliderValue: number;
    /**
     * If an age or timeline renderer was generated, indicates the starttime of the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#startTime)
     */
    startTime: string | number;
    /**
     * If the UI offers the option to display values based on a ratio orpercentage, this indicates which selection was made.**Possible Values:** percent | percent-of-total | ratio
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#style)
     */
    style: string;
    /**
     * Indicates the theme selected by the user when generating a rendereror visual variable with one of the Smart Mapping functions.**Possible Values:** above-and-below | centered-on | extremes | high-to-low
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#theme)
     */
    theme: string;
    /**
     * The type of visual variable generated.**Possible Values:** color | size | opacity
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#type)
     */
    type: string;
    /**
     * If an age or timeline renderer was generated, indicates the time units used.**Possible Values:** seconds | minutes | hours | days | months | years
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#units)
     */
    units: string;

    /**
     * Creates a deep clone of the instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#clone)
     *
     *
     */
    clone(): AuthoringInfoVisualVariable;
  }

  interface AuthoringInfoVisualVariableConstructor {
    new (properties?: AuthoringInfoVisualVariableProperties): AuthoringInfoVisualVariable;

    fromJSON(json: any): AuthoringInfoVisualVariable;
  }

  export const AuthoringInfoVisualVariable: AuthoringInfoVisualVariableConstructor;

  interface AuthoringInfoVisualVariableProperties {
    /**
     * If an age or timeline renderer was generated, indicates the endtime of the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#endTime)
     */
    endTime?: string | number;
    /**
     * Indicates the field name used for generating the data-driven visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#field)
     */
    field?: string;
    /**
     * Indicates the value of the upper handle if a slider was used to generate the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#maxSliderValue)
     */
    maxSliderValue?: number;
    /**
     * Indicates the value of the lower handle if a slider was used to generate the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#minSliderValue)
     */
    minSliderValue?: number;
    /**
     * If an age or timeline renderer was generated, indicates the starttime of the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#startTime)
     */
    startTime?: string | number;
    /**
     * If the UI offers the option to display values based on a ratio orpercentage, this indicates which selection was made.**Possible Values:** percent | percent-of-total | ratio
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#style)
     */
    style?: string;
    /**
     * Indicates the theme selected by the user when generating a rendereror visual variable with one of the Smart Mapping functions.**Possible Values:** above-and-below | centered-on | extremes | high-to-low
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#theme)
     */
    theme?: string;
    /**
     * The type of visual variable generated.**Possible Values:** color | size | opacity
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#type)
     */
    type?: string;
    /**
     * If an age or timeline renderer was generated, indicates the time units used.**Possible Values:** seconds | minutes | hours | days | months | years
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#units)
     */
    units?: string;
  }

  interface ClassBreakInfo extends Accessor, JSONSupport {
    /**
     * Describes the data represented by the class break. This label will appear in the[Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget next to the symbol representing the break.If no label is provided, then a default label is derived using the[minValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#minValue) and [maxValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#maxValue).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#label)
     */
    label: string;
    /**
     * Sets the maximum value for the class break. Features with this value or smaller as small asthe provided [minValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#minValue) will be rendered with the given [symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#symbol).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#maxValue)
     */
    maxValue: number;
    /**
     * Sets the minimum value for the class break. Features with this value or greater up tothe provided [maxValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#maxValue) will be rendered with the given [symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#symbol).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#minValue)
     */
    minValue: number;
    /**
     * Defines the symbol used to render features with data values that are within the boundsdefined for the class break. This value may be autocast by specifying the symbol `type`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#symbol)
     */
    symbol: Symbol;

    /**
     * Creates a deep clone of the class break info object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#clone)
     *
     *
     */
    clone(): ClassBreakInfo;
  }

  interface ClassBreakInfoConstructor {
    new (properties?: ClassBreakInfoProperties): ClassBreakInfo;

    fromJSON(json: any): ClassBreakInfo;
  }

  export const ClassBreakInfo: ClassBreakInfoConstructor;

  interface ClassBreakInfoProperties {
    /**
     * Describes the data represented by the class break. This label will appear in the[Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget next to the symbol representing the break.If no label is provided, then a default label is derived using the[minValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#minValue) and [maxValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#maxValue).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#label)
     */
    label?: string;
    /**
     * Sets the maximum value for the class break. Features with this value or smaller as small asthe provided [minValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#minValue) will be rendered with the given [symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#symbol).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#maxValue)
     */
    maxValue?: number;
    /**
     * Sets the minimum value for the class break. Features with this value or greater up tothe provided [maxValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#maxValue) will be rendered with the given [symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#symbol).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#minValue)
     */
    minValue?: number;
    /**
     * Defines the symbol used to render features with data values that are within the boundsdefined for the class break. This value may be autocast by specifying the symbol `type`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#symbol)
     */
    symbol?: SymbolProperties;
  }

  interface HeatmapColorStop extends Accessor {
    /**
     * The color to shade a given pixel based on its calculated pixel intensity [ratio](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-HeatmapColorStop.html#ratio).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-HeatmapColorStop.html#color)
     */
    color: Color;
    /**
     * The ratio of a pixel's intensity value to the [minPixelIntensity](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#minPixelIntensity) of the renderer.The ratio of each pixel is matched to the corresponding [color](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-HeatmapColorStop.html#color).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-HeatmapColorStop.html#ratio)
     */
    ratio: number;

    /**
     * Creates a deep clone of the color stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-HeatmapColorStop.html#clone)
     *
     *
     */
    clone(): HeatmapColorStop;
  }

  interface HeatmapColorStopConstructor {
    new (properties?: HeatmapColorStopProperties): HeatmapColorStop;
  }

  export const HeatmapColorStop: HeatmapColorStopConstructor;

  interface HeatmapColorStopProperties {
    /**
     * The color to shade a given pixel based on its calculated pixel intensity [ratio](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-HeatmapColorStop.html#ratio).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-HeatmapColorStop.html#color)
     */
    color?: Color | number[] | string;
    /**
     * The ratio of a pixel's intensity value to the [minPixelIntensity](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#minPixelIntensity) of the renderer.The ratio of each pixel is matched to the corresponding [color](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-HeatmapColorStop.html#color).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-HeatmapColorStop.html#ratio)
     */
    ratio?: number;
  }

  interface supportJsonUtils {
    /**
     * Creates a new instance of an appropriate [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html) class and initializes it with values from a JSON objectgenerated from a product in the ArcGIS platform. The object passed into the input `json`parameter often comes from a response to a query operation in the REST API or a[toJSON()](http://pro.arcgis.com/en/pro-app/tool-reference/conversion/features-to-json.htm)method from another ArcGIS product. See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html)topic in the Guide for details and examples of when and how to use this function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-jsonUtils.html#fromJSON)
     *
     * @param json A JSON representation of the instance in the ArcGIS format. See                     the [ArcGIS REST API documentation](https://developers.arcgis.com/documentation/common-data-types/renderer-objects.htm)                     for examples of the structure of various input JSON objects.
     *
     */
    fromJSON(json: any): Renderer;
  }

  export const supportJsonUtils: supportJsonUtils;

  interface UniqueValueInfo extends Accessor, JSONSupport {
    /**
     * Describes the [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueInfo.html#value) represented by the [symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueInfo.html#symbol). This label will appear in the[Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget next to the symbol representing the value.If no label is provided, then the raw [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueInfo.html#value) is displayed in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueInfo.html#label)
     */
    label: string;
    /**
     * Defines the symbol used to render features with the provided [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueInfo.html#value).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueInfo.html#symbol)
     */
    symbol: Symbol;
    /**
     * Features with this value will be rendered with the given [symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueInfo.html#symbol).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueInfo.html#value)
     */
    value: string | number;

    /**
     * Creates a deep clone of the unique value info object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueInfo.html#clone)
     *
     *
     */
    clone(): UniqueValueInfo;
  }

  interface UniqueValueInfoConstructor {
    new (properties?: UniqueValueInfoProperties): UniqueValueInfo;

    fromJSON(json: any): UniqueValueInfo;
  }

  export const UniqueValueInfo: UniqueValueInfoConstructor;

  interface UniqueValueInfoProperties {
    /**
     * Describes the [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueInfo.html#value) represented by the [symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueInfo.html#symbol). This label will appear in the[Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget next to the symbol representing the value.If no label is provided, then the raw [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueInfo.html#value) is displayed in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueInfo.html#label)
     */
    label?: string;
    /**
     * Defines the symbol used to render features with the provided [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueInfo.html#value).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueInfo.html#symbol)
     */
    symbol?: SymbolProperties;
    /**
     * Features with this value will be rendered with the given [symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueInfo.html#symbol).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueInfo.html#value)
     */
    value?: string | number;
  }

  interface UniqueValueRenderer extends Renderer, VisualVariablesRenderer {
    /**
     * This property is only relevant When symbolizing polygon features with marker symbols(or [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html)) in the [uniqueValueInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#uniqueValueInfos) of this renderer.This is usually done when adding a [SizeVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html) to the [visualVariables](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#visualVariables))in a bivariate visualization (color indicates a type-based value and size indicates the value of a separate numeric field).Use this property to set a background [FillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol.html) (or [PolygonSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PolygonSymbol3D.html) ifvisualizing data in 3D) to visualize the boundaries of each polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#backgroundFillSymbol)
     */
    backgroundFillSymbol: FillSymbol | PolygonSymbol3D;
    /**
     * Label used in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) to describe features assigned the[default symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#defaultSymbol). The [default symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#defaultSymbol) is used to drawall features with unspecified, unmatched values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#defaultLabel)
     */
    defaultLabel: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#defaultSymbol)
     */
    defaultSymbol: Symbol;
    /**
     * The name of the attribute field the renderer uses to match unique values or types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field)
     */
    field: string;
    /**
     * If needed, specifies the name of an additional attribute field the renderer will use to match values.For example, if you specify two fields:```jsvar renderer = {  type: "unique-value",  // autocasts as new UniqueValueRenderer()  field: "REGION",  field2: "RANK",  fieldDelimiter: ", ",  // comma + space used to separate values from all fields  uniqueValueInfos: [    {      value: "North, 1",  // features in the "North" region and a rank of 1      symbol: sym1  // will be assigned sym1    }, {      value: "North, 2",  // features in the "North" region and a rank of 2      symbol: sym2  // will be assigned sym2    },    ...  ]};```All combinations of values of [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field) and `field2` are unique values andmay have their own symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field2)
     */
    field2: string;
    /**
     * If needed, specify the name of a third attribute field the renderer will use to match values.For example, if you specify three fields:```jsvar renderer = {  type: "unique-value",  // autocasts as new UniqueValueRenderer()  field: "REGION",  field2: "RANK",  field3: "CLASS",  fieldDelimiter: ", ",  // comma + space used to separate values from all fields  uniqueValueInfos: [    {      value: "North, 1, medium",  // features in the "North" region, a rank of 1, and "medium" class      symbol: sym1  // will be assigned sym1    }, {      value: "North, 2, medium",  // features in the "North" region, a rank of 2, and a "medium class      symbol: sym2  // will be assigned sym2    },    ...  ]};```All combinations of values of [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field), [field2](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field2), and `field3` are unique values andmay have their own symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field3)
     */
    field3: string;
    /**
     * String inserted between the values if multiple attribute fields are specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#fieldDelimiter)
     */
    fieldDelimiter: string;
    /**
     * An object providing options for displaying the renderer in the Legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#legendOptions)
     */
    legendOptions: UniqueValueRendererLegendOptions;
    /**
     * The type of Renderer. For UniqueValueRenderer this value is always `unique-value`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#type)
     */
    readonly type: "unique-value";
    /**
     * Each element in the array is an object that provides information about a unique valueassociated with the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#uniqueValueInfos)
     */
    uniqueValueInfos: UniqueValueInfo[];
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression evaluating to either a stringor a number. This expression can reference field values using the `$feature` global variableand perform mathematical calculations and logical evaluations at runtime.This property is typically used as an alternative to [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field) for data-drivenvisualizations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#valueExpression)
     */
    valueExpression: string;
    /**
     * The title identifying and describing the associated [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html)expression as defined in the [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#valueExpression) property. This is displayedas the title of the corresponding renderer in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html)in the absence of a provided `title` in the [legendOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#legendOptions) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#valueExpressionTitle)
     */
    valueExpressionTitle: string;

    /**
     * Adds a unique value and symbol to the renderer. You can provide the value and its associated symbol asindividual arguments or as an info object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#addUniqueValueInfo)
     *
     * @param valueOrInfo The value to match. The value can be providedas an individual argument or as an [info object described in uniqueValueInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#uniqueValueInfos).
     * @param symbol The symbol used to represent features matching thespecified `value`.
     *
     */
    addUniqueValueInfo(valueOrInfo: string | number | any, symbol?: Symbol | SymbolProperties): void;
    /**
     * Creates a deep clone of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#clone)
     *
     *
     */
    clone(): UniqueValueRenderer;
    /**
     * Returns rendering and legend information (as defined by the renderer) associated with the given graphic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#getUniqueValueInfo)
     *
     * @param graphic The graphic whose rendering and legend information will be returned.
     *
     */
    getUniqueValueInfo(graphic: Graphic): IPromise<UniqueValueInfo>;
    /**
     * Removes a unique value from the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#removeUniqueValueInfo)
     *
     * @param value Value to remove from [uniqueValueInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#uniqueValueInfos).
     *
     */
    removeUniqueValueInfo(value: string): void;
  }

  interface UniqueValueRendererConstructor {
    new (properties?: UniqueValueRendererProperties): UniqueValueRenderer;

    fromJSON(json: any): UniqueValueRenderer;
  }

  export const UniqueValueRenderer: UniqueValueRendererConstructor;

  interface UniqueValueRendererProperties extends RendererProperties, VisualVariablesRendererProperties {
    /**
     * This property is only relevant When symbolizing polygon features with marker symbols(or [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html)) in the [uniqueValueInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#uniqueValueInfos) of this renderer.This is usually done when adding a [SizeVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html) to the [visualVariables](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#visualVariables))in a bivariate visualization (color indicates a type-based value and size indicates the value of a separate numeric field).Use this property to set a background [FillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol.html) (or [PolygonSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PolygonSymbol3D.html) ifvisualizing data in 3D) to visualize the boundaries of each polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#backgroundFillSymbol)
     */
    backgroundFillSymbol?: FillSymbolProperties | PolygonSymbol3DProperties;
    /**
     * Label used in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) to describe features assigned the[default symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#defaultSymbol). The [default symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#defaultSymbol) is used to drawall features with unspecified, unmatched values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#defaultLabel)
     */
    defaultLabel?: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#defaultSymbol)
     */
    defaultSymbol?: SymbolProperties;
    /**
     * The name of the attribute field the renderer uses to match unique values or types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field)
     */
    field?: string;
    /**
     * If needed, specifies the name of an additional attribute field the renderer will use to match values.For example, if you specify two fields:```jsvar renderer = {  type: "unique-value",  // autocasts as new UniqueValueRenderer()  field: "REGION",  field2: "RANK",  fieldDelimiter: ", ",  // comma + space used to separate values from all fields  uniqueValueInfos: [    {      value: "North, 1",  // features in the "North" region and a rank of 1      symbol: sym1  // will be assigned sym1    }, {      value: "North, 2",  // features in the "North" region and a rank of 2      symbol: sym2  // will be assigned sym2    },    ...  ]};```All combinations of values of [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field) and `field2` are unique values andmay have their own symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field2)
     */
    field2?: string;
    /**
     * If needed, specify the name of a third attribute field the renderer will use to match values.For example, if you specify three fields:```jsvar renderer = {  type: "unique-value",  // autocasts as new UniqueValueRenderer()  field: "REGION",  field2: "RANK",  field3: "CLASS",  fieldDelimiter: ", ",  // comma + space used to separate values from all fields  uniqueValueInfos: [    {      value: "North, 1, medium",  // features in the "North" region, a rank of 1, and "medium" class      symbol: sym1  // will be assigned sym1    }, {      value: "North, 2, medium",  // features in the "North" region, a rank of 2, and a "medium class      symbol: sym2  // will be assigned sym2    },    ...  ]};```All combinations of values of [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field), [field2](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field2), and `field3` are unique values andmay have their own symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field3)
     */
    field3?: string;
    /**
     * String inserted between the values if multiple attribute fields are specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#fieldDelimiter)
     */
    fieldDelimiter?: string;
    /**
     * An object providing options for displaying the renderer in the Legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#legendOptions)
     */
    legendOptions?: UniqueValueRendererLegendOptions;
    /**
     * Each element in the array is an object that provides information about a unique valueassociated with the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#uniqueValueInfos)
     */
    uniqueValueInfos?: UniqueValueInfoProperties[];
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression evaluating to either a stringor a number. This expression can reference field values using the `$feature` global variableand perform mathematical calculations and logical evaluations at runtime.This property is typically used as an alternative to [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field) for data-drivenvisualizations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#valueExpression)
     */
    valueExpression?: string;
    /**
     * The title identifying and describing the associated [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html)expression as defined in the [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#valueExpression) property. This is displayedas the title of the corresponding renderer in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html)in the absence of a provided `title` in the [legendOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#legendOptions) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#valueExpressionTitle)
     */
    valueExpressionTitle?: string;
  }

  export interface UniqueValueRendererLegendOptions extends Object {
    /**
     * Describes the variable driving the visualization. This is displayedas the title of the corresponding renderer in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) andtakes precedence over a [field alias](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#alias)or [valueExpressionTitle](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#valueExpressionTitle).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#legendOptions)
     */
    title?: string;
  }

  interface ColorVariable extends VisualVariable, JSONSupport {
    /**
     * Name of the numeric attribute field by which to normalizethe data. If this field is used, then the values in [stops](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html#stops) should benormalized as percentages or ratios.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html#normalizationField)
     */
    normalizationField: string;
    /**
     * An array of sequential objects, or stops, that defines a continuous color ramp.You must specify 2 - 8 stops. In most cases, no more than five are needed. Features with values that fallbetween the given stops will be assigned colorslinearly interpolated along the ramp in relation to the nearest stop values. The stops must be listed in ascending orderbased on the value of the `value` property in each stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html#stops)
     */
    stops: ColorStop[];
    /**
     * The visual variable type. For ColorVariable, this value is always `color`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html#type)
     */
    readonly type: "color";

    /**
     * Creates a deep clone of the ColorVariable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html#clone)
     *
     *
     */
    clone(): ColorVariable;
  }

  interface ColorVariableConstructor {
    new (properties?: ColorVariableProperties): ColorVariable;

    fromJSON(json: any): ColorVariable;
  }

  export const ColorVariable: ColorVariableConstructor;

  interface ColorVariableProperties extends VisualVariableProperties {
    /**
     * Name of the numeric attribute field by which to normalizethe data. If this field is used, then the values in [stops](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html#stops) should benormalized as percentages or ratios.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html#normalizationField)
     */
    normalizationField?: string;
    /**
     * An array of sequential objects, or stops, that defines a continuous color ramp.You must specify 2 - 8 stops. In most cases, no more than five are needed. Features with values that fallbetween the given stops will be assigned colorslinearly interpolated along the ramp in relation to the nearest stop values. The stops must be listed in ascending orderbased on the value of the `value` property in each stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html#stops)
     */
    stops?: ColorStopProperties[];
  }

  interface OpacityVariable extends VisualVariable, JSONSupport {
    /**
     * Name of the numeric attribute field by which to normalizethe data. If this field is used, then the values in [stops](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html#stops) should benormalized as percentages or ratios.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html#normalizationField)
     */
    normalizationField: string;
    /**
     * An array of objects that defines the opacity to apply to features in a layer in a sequence of stops.You must specify 2 - 8 stops. In most cases, no more than five are needed. Features with data values that fallbetween the given stops will be assigned opacity valueslinearly interpolated along the ramp in relation to the stop values. The stops must be listed in ascending orderbased on the value of the `value` property in each stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html#stops)
     */
    stops: OpacityStop[];
    /**
     * The visual variable type. For OpacityVariable, this value is always `opacity`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html#type)
     */
    readonly type: "opacity";

    /**
     * Creates a deep clone of the OpacityVariable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html#clone)
     *
     *
     */
    clone(): OpacityVariable;
  }

  interface OpacityVariableConstructor {
    new (properties?: OpacityVariableProperties): OpacityVariable;

    fromJSON(json: any): OpacityVariable;
  }

  export const OpacityVariable: OpacityVariableConstructor;

  interface OpacityVariableProperties extends VisualVariableProperties {
    /**
     * Name of the numeric attribute field by which to normalizethe data. If this field is used, then the values in [stops](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html#stops) should benormalized as percentages or ratios.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html#normalizationField)
     */
    normalizationField?: string;
    /**
     * An array of objects that defines the opacity to apply to features in a layer in a sequence of stops.You must specify 2 - 8 stops. In most cases, no more than five are needed. Features with data values that fallbetween the given stops will be assigned opacity valueslinearly interpolated along the ramp in relation to the stop values. The stops must be listed in ascending orderbased on the value of the `value` property in each stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html#stops)
     */
    stops?: OpacityStopProperties[];
  }

  interface RotationVariable extends VisualVariable, JSONSupport {
    /**
     * Only applicable when working in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).Defines the axis the rotation visual variable should be applied to when rendering features with an[ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html).If the symbol resource is aligned such that its forward facing side points in the direction of the y-axis(the y-axis always points North in WGS84 or WebMercator coordinates), its upwards facing side is pointingin the direction of the z-axis, and its right-hand side points in the direction of the x-axis (the x-axisalways points East in WGS84 or WebMercator coordinates), then the following rotation axis will rotate thesymbol as indicated by their name.Possible Value | Description----------------|-----------heading | The rotation of the symbol in the horizontal plane (i.e., around the z axis).tilt | The rotation of the symbol in the longitudinal vertical plane (i.e., around the x axis).roll | The rotation of the symbol in the lateral vertical plane (i.e., around the y axis).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-RotationVariable.html#axis)
     *
     * @default heading
     */
    axis: string;
    /**
     * Defines the origin and direction of rotation dependingon how the angle of rotation was measured. See the table below for a list of possible values.This property only applies to rotations around the `heading` axis.Value | Description------|------------geographic | Rotates the symbol from the north in a clockwise direction.arithmetic | Rotates the symbol from the east in a counter-clockwise direction.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-RotationVariable.html#rotationType)
     *
     * @default geographic
     */
    rotationType: string;
    /**
     * The visual variable type. For RotationVariable, this value is always `rotation`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-RotationVariable.html#type)
     */
    readonly type: "rotation";

    /**
     * Creates a deep clone of the RotationVariable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-RotationVariable.html#clone)
     *
     *
     */
    clone(): RotationVariable;
  }

  interface RotationVariableConstructor {
    new (properties?: RotationVariableProperties): RotationVariable;

    fromJSON(json: any): RotationVariable;
  }

  export const RotationVariable: RotationVariableConstructor;

  interface RotationVariableProperties extends VisualVariableProperties {
    /**
     * Only applicable when working in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).Defines the axis the rotation visual variable should be applied to when rendering features with an[ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html).If the symbol resource is aligned such that its forward facing side points in the direction of the y-axis(the y-axis always points North in WGS84 or WebMercator coordinates), its upwards facing side is pointingin the direction of the z-axis, and its right-hand side points in the direction of the x-axis (the x-axisalways points East in WGS84 or WebMercator coordinates), then the following rotation axis will rotate thesymbol as indicated by their name.Possible Value | Description----------------|-----------heading | The rotation of the symbol in the horizontal plane (i.e., around the z axis).tilt | The rotation of the symbol in the longitudinal vertical plane (i.e., around the x axis).roll | The rotation of the symbol in the lateral vertical plane (i.e., around the y axis).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-RotationVariable.html#axis)
     *
     * @default heading
     */
    axis?: string;
    /**
     * Defines the origin and direction of rotation dependingon how the angle of rotation was measured. See the table below for a list of possible values.This property only applies to rotations around the `heading` axis.Value | Description------|------------geographic | Rotates the symbol from the north in a clockwise direction.arithmetic | Rotates the symbol from the east in a counter-clockwise direction.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-RotationVariable.html#rotationType)
     *
     * @default geographic
     */
    rotationType?: string;
  }

  interface SizeVariable extends VisualVariable, JSONSupport {
    /**
     * Only applicable when working in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).Defines the axis the size visual variable should be applied to when rendering features with an[ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html). See the[local scene sample](https://developers.arcgis.com/javascript/latest/sample-code/scene-local/index.html) for an example of this.Possible Value | Description----------------|-----------width | The diameter of the symbol from east to west.depth | The diameter of the symbol from north to south.height | The height of the symbol.width-and-depth | Applies the size visual variable to both width and depth axes.all | Applies the size visual variable to all axes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#axis)
     *
     * @default all
     */
    axis: string;
    /**
     * Deprecated. Use [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueExpression) instead**.  The only supported expression is `view.scale`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#expression)
     */
    expression: string;
    /**
     * The maximum data value used in the size ramp. Features whose [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#field) or[valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueExpression) return a value equal to or higher thanthe value defined in `maxDataValue` will be rendered at the size defined in [maxSize](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#maxSize).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#maxDataValue)
     */
    maxDataValue: number;
    /**
     * The size used to render a feature containing the maximum data value.* When setting a number, sizes are expressed in points for all 2D symbols and 3D flat symbol layers; size is  expressed in meters for all 3D volumetric symbols.* String values are only supported for 2D symbols and 3D flat symbol layers. Strings may specify size in  either points or pixels (e.g. `minSize: "16pt"`, `minSize: "12px"`).* When an object is used, the  size of features whose data value (defined in [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#field) or [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueExpression))  is greater than or equal to the [maxDataValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#maxDataValue) for the given view scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#maxSize)
     */
    maxSize: number | ScaleDependentStops;
    /**
     * The minimum data value used in the size ramp. Features whose [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#field) or[valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueExpression) return a value equal to or lower thanthe value defined in `maxDataValue` will be rendered at the size defined in [minSize](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#minSize).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#minDataValue)
     */
    minDataValue: number;
    /**
     * The size used to render a feature containing the minimum data value.* When setting a number, sizes are expressed in points for all 2D symbols and 3D flat symbol layers; size is  expressed in meters for all 3D volumetric symbols.* String values are only supported for 2D symbols and 3D flat symbol layers. Strings may specify size in  either points or pixels (e.g. `minSize: "16pt"`, `minSize: "12px"`).* When an object is used, the  size of features whose data value (defined in [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#field) or [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueExpression))  is greater than or equal to the [minDataValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#minDataValue) for the given view scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#minSize)
     */
    minSize: number | ScaleDependentStops;
    /**
     * The name of the numeric attribute field used to normalizethe data in the given [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#field). If this field is used, then the values in [maxDataValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#maxDataValue)and [minDataValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#minDataValue) or [stops](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#stops) should benormalized as percentages or ratios.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#normalizationField)
     */
    normalizationField: string;
    /**
     * An array of objects that defines the mapping of data values returned from [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#field) or[valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueExpression) to icon sizes. You must specify 2 - 6 stops. The stops must be listed in ascending orderbased on the value of the `value` property in each stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#stops)
     */
    stops: SizeStop[];
    /**
     * This value must be `outline` when scaling polygon outline widthsbased on the view scale. If scale-dependent icons are desired, then this property should be ignored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#target)
     */
    target: string;
    /**
     * The visual variable type. For SizeVariable, this value is always `size`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#type)
     */
    readonly type: "size";
    /**
     * When setting a size visual variable on a renderer using an[ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), this property indicates whether to apply the valuedefined by the [height](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#height),[width](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#width), or[depth](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#depth) properties to the corresponding [axis](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#axis) ofthis visual variable instead of proportionally scaling this axis' value.[View an example](https://developers.arcgis.com/javascript/latest/sample-code/visualization-multivariate-3d/index.html) of this.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#useSymbolValue)
     */
    useSymbolValue: boolean;
    /**
     * Specifies how to apply the data value when mapping real-world sizes. See table below for supported values.Value | Description------|-----------radius | The point data value represents the radius of a circular feature.diameter | The point data value represents the diameter of a circular feature.area | The point data value represents the area of a feature.width | The polyline data value represents the width of a line.distance | The polyline data value represents the distance from the center line (one half of the width).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueRepresentation)
     */
    valueRepresentation: string;
    /**
     * Indicates the unit of measurement used to interpret the value returned by [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#field) or [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueExpression).For 3D volumetric symbols the default is `meters`. This property should not be used if the data valuerepresents a thematic quantity (e.g. traffic count, census data, etc.).**Possible Values:** unknown | inches | feet | yards | miles | nautical-miles | millimeters | centimeters | decimeters | meters | kilometers | decimal-degrees
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueUnit)
     */
    valueUnit: string;

    /**
     * Creates a deep clone of the SizeVisualVariable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#clone)
     *
     *
     */
    clone(): SizeVariable;
  }

  interface SizeVariableConstructor {
    new (properties?: SizeVariableProperties): SizeVariable;

    fromJSON(json: any): SizeVariable;
  }

  export const SizeVariable: SizeVariableConstructor;

  interface SizeVariableProperties extends VisualVariableProperties {
    /**
     * Only applicable when working in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).Defines the axis the size visual variable should be applied to when rendering features with an[ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html). See the[local scene sample](https://developers.arcgis.com/javascript/latest/sample-code/scene-local/index.html) for an example of this.Possible Value | Description----------------|-----------width | The diameter of the symbol from east to west.depth | The diameter of the symbol from north to south.height | The height of the symbol.width-and-depth | Applies the size visual variable to both width and depth axes.all | Applies the size visual variable to all axes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#axis)
     *
     * @default all
     */
    axis?: string;
    /**
     * Deprecated. Use [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueExpression) instead**.  The only supported expression is `view.scale`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#expression)
     */
    expression?: string;
    /**
     * The maximum data value used in the size ramp. Features whose [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#field) or[valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueExpression) return a value equal to or higher thanthe value defined in `maxDataValue` will be rendered at the size defined in [maxSize](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#maxSize).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#maxDataValue)
     */
    maxDataValue?: number;
    /**
     * The size used to render a feature containing the maximum data value.* When setting a number, sizes are expressed in points for all 2D symbols and 3D flat symbol layers; size is  expressed in meters for all 3D volumetric symbols.* String values are only supported for 2D symbols and 3D flat symbol layers. Strings may specify size in  either points or pixels (e.g. `minSize: "16pt"`, `minSize: "12px"`).* When an object is used, the  size of features whose data value (defined in [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#field) or [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueExpression))  is greater than or equal to the [maxDataValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#maxDataValue) for the given view scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#maxSize)
     */
    maxSize?: number | ScaleDependentStops | string;
    /**
     * The minimum data value used in the size ramp. Features whose [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#field) or[valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueExpression) return a value equal to or lower thanthe value defined in `maxDataValue` will be rendered at the size defined in [minSize](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#minSize).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#minDataValue)
     */
    minDataValue?: number;
    /**
     * The size used to render a feature containing the minimum data value.* When setting a number, sizes are expressed in points for all 2D symbols and 3D flat symbol layers; size is  expressed in meters for all 3D volumetric symbols.* String values are only supported for 2D symbols and 3D flat symbol layers. Strings may specify size in  either points or pixels (e.g. `minSize: "16pt"`, `minSize: "12px"`).* When an object is used, the  size of features whose data value (defined in [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#field) or [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueExpression))  is greater than or equal to the [minDataValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#minDataValue) for the given view scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#minSize)
     */
    minSize?: number | ScaleDependentStops | string;
    /**
     * The name of the numeric attribute field used to normalizethe data in the given [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#field). If this field is used, then the values in [maxDataValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#maxDataValue)and [minDataValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#minDataValue) or [stops](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#stops) should benormalized as percentages or ratios.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#normalizationField)
     */
    normalizationField?: string;
    /**
     * An array of objects that defines the mapping of data values returned from [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#field) or[valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueExpression) to icon sizes. You must specify 2 - 6 stops. The stops must be listed in ascending orderbased on the value of the `value` property in each stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#stops)
     */
    stops?: SizeStopProperties[];
    /**
     * This value must be `outline` when scaling polygon outline widthsbased on the view scale. If scale-dependent icons are desired, then this property should be ignored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#target)
     */
    target?: string;
    /**
     * When setting a size visual variable on a renderer using an[ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), this property indicates whether to apply the valuedefined by the [height](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#height),[width](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#width), or[depth](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#depth) properties to the corresponding [axis](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#axis) ofthis visual variable instead of proportionally scaling this axis' value.[View an example](https://developers.arcgis.com/javascript/latest/sample-code/visualization-multivariate-3d/index.html) of this.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#useSymbolValue)
     */
    useSymbolValue?: boolean;
    /**
     * Specifies how to apply the data value when mapping real-world sizes. See table below for supported values.Value | Description------|-----------radius | The point data value represents the radius of a circular feature.diameter | The point data value represents the diameter of a circular feature.area | The point data value represents the area of a feature.width | The polyline data value represents the width of a line.distance | The polyline data value represents the distance from the center line (one half of the width).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueRepresentation)
     */
    valueRepresentation?: string;
    /**
     * Indicates the unit of measurement used to interpret the value returned by [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#field) or [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueExpression).For 3D volumetric symbols the default is `meters`. This property should not be used if the data valuerepresents a thematic quantity (e.g. traffic count, census data, etc.).**Possible Values:** unknown | inches | feet | yards | miles | nautical-miles | millimeters | centimeters | decimeters | meters | kilometers | decimal-degrees
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueUnit)
     */
    valueUnit?: string;
  }

  /**
   * Defines a size visual variable with minimum and maximum bounds.When an object with this specification is applied to the [visualVariables](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-SimpleRenderer.html#visualVariables) propertyof a renderer, then feature sizes are bounded by min and max data values. Features with values greater than theprovided max value are assigned the specified maximum size. Likewise, features with values less than the provided min valueare assigned the specified minimum size. Features with values between the min and the max are assigned a corresponding size thatis linearly interpolated between the min and max size values.The properties for this size visual variable type are defined below.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#BoundedMinMax)
   */
  export interface BoundedMinMax extends Object {
    /**
     * Value must be `size`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#BoundedMinMax)
     */
    type: string;
    /**
     * See [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#field).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#BoundedMinMax)
     */
    field?: string;
    /**
     * See [normalizationField](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#normalizationField).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#BoundedMinMax)
     */
    normalizationField?: string;
    /**
     * See [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueExpression).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#BoundedMinMax)
     */
    valueExpression?: string;
    /**
     * See [valueExpressionTitle](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueExpressionTitle).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#BoundedMinMax)
     */
    valueExpressionTitle?: string;
    /**
     * See [maxDataValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#maxDataValue).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#BoundedMinMax)
     */
    maxDataValue: number;
    /**
     * The size used to render a feature containing the maximum data value.  * When setting a number, sizes are expressed in points for all 2D symbols and 3D flat symbol layers; size is    expressed in meters for all 3D volumetric symbols.  * String values are only supported for 2D symbols and 3D flat symbol layers. Strings may specify size in    either points or pixels (e.g. `minSize: "16pt"`, `minSize: "12px"`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#BoundedMinMax)
     */
    maxSize: string | number;
    /**
     * See [minDataValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#minDataValue).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#BoundedMinMax)
     */
    minDataValue: number;
    /**
     * The size used to render a feature containing the minimum data value.  * When setting a number, sizes are expressed in points for all 2D symbols and 3D flat symbol layers; size is    expressed in meters for all 3D volumetric symbols.  * String values are only supported for 2D symbols and 3D flat symbol layers. Strings may specify size in    either points or pixels (e.g. `minSize: "16pt"`, `minSize: "12px"`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#BoundedMinMax)
     */
    minSize: string | number;
  }

  /**
   * Defines a size visual variable where data values are interpreted asreal-world sizes based on a given unit. Features are then sized according to thereal-world measurements, not thematic values and screen units.Data values must refer to the [planar](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#planarLength) size of the feature in theunits of the view's spatial reference. This will properly render each feature'ssize alongside all other features in other operational layers and the base layers.[![renderer-vv-rw](https://developers.arcgis.com/javascript/assets/img/samples/3-trees-3d.png)](https://developers.arcgis.com/javascript/latest/sample-code/visualization-trees-realistic/index.html)The object specification for this object is provided below.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#RealWorldSize)
   */
  export interface RealWorldSize extends Object {
    /**
     * Value must be `size`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#RealWorldSize)
     */
    type: string;
    /**
     * See [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#field). The field name containing the planar size of the feature  in the units of the view's spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#RealWorldSize)
     */
    field?: string;
    /**
     * See [normalizationField](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#normalizationField).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#RealWorldSize)
     */
    normalizationField?: string;
    /**
     * See [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueExpression). The expression  must return the planar size of the feature in the units of the view's spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#RealWorldSize)
     */
    valueExpression?: string;
    /**
     * See [valueUnit](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueUnit).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#RealWorldSize)
     */
    valueUnit: string;
    /**
     * See [valueRepresentation](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueRepresentation).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#RealWorldSize)
     */
    valueRepresentation?: string;
  }

  /**
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentIcons)
   */
  export interface ScaleDependentIcons extends Object {
    /**
     * Value must be `size`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentIcons)
     */
    type: string;
    /**
     * See [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#field).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentIcons)
     */
    field?: string;
    /**
     * See [normalizationField](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#normalizationField).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentIcons)
     */
    normalizationField?: string;
    /**
     * See [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueExpression).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentIcons)
     */
    valueExpression?: string;
    /**
     * **Deprecated since version 4.2. Use `valueExpression` instead**.  The only supported expression is `view.scale`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentIcons)
     */
    expression?: string;
    /**
     * See [maxDataValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#maxDataValue).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentIcons)
     */
    maxDataValue: number;
    /**
     * An object defining the  size of features whose data value (defined in `field` or `valueExpression`)  is greater than or equal to the `maxDataValue` for the given view scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentIcons)
     */
    maxSize: ScaleDependentStops;
    /**
     * See [minDataValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#minDataValue).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentIcons)
     */
    minDataValue: number;
    /**
     * An object defining the  size of features whose data value (defined in `field` or `valueExpression`)  is less than or equal to the `minDataValue` for the given view scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentIcons)
     */
    minSize: ScaleDependentStops;
  }

  /**
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentStops)
   */
  export interface ScaleDependentStops extends Object {
    /**
     * Value must be `size`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentStops)
     */
    type: string;
    /**
     * This value must be `$view.scale`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentStops)
     */
    valueExpression: string;
    /**
     * **Deprecated since version 4.2. Use `valueExpression` instead**.  The only supported expression is `view.scale`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentStops)
     */
    expression?: string;
    /**
     * This value must be `outline` when scaling polygon outline widths  based on the view scale. If scale-dependent icons are desired, then this property should be ignored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentStops)
     */
    target?: string;
    /**
     * An array of objects that define the size of the icon  (or alternatively the width of the polygon outline) at the given scale `value`. You must specify 2 - 6 stops.  The stops must be listed in ascending order based on the value of the `value` property in each stop.  When the [MapView.scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale) equals the `value` in a stop, then icons (or outlines)  will be rendered with the corresponding size.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ScaleDependentStops)
     */
    stops: SizeStop[];
  }

  /**
   * Defines two or more stops at which feature sizes are mapped to data values in asize visual variable. Setting two stops will have the same effect ascreating a [BoundedMinMax](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#BoundedMinMax) size visual variable. Adding additional stops allowsyou to map specific sizes to data values. Sizes are interpolated linearly between stopvalues.The object specification for this object is provided below.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ThematicStops)
   */
  export interface ThematicStops extends Object {
    /**
     * Value must be `size`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ThematicStops)
     */
    type: string;
    /**
     * See [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#field).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ThematicStops)
     */
    field?: string;
    /**
     * See [normalizationField](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#normalizationField).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ThematicStops)
     */
    normalizationField?: string;
    /**
     * See [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueExpression).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ThematicStops)
     */
    valueExpression?: string;
    /**
     * An array of objects  defining the thematic size ramp in a sequence of data or  expression stops. At least two stops are required. The stops must be listed in ascending order  based on the value of the `value` property in each stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ThematicStops)
     */
    stops: SizeStop[];
  }

  interface ColorStop extends Accessor, JSONSupport {
    /**
     * The [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) used to render features with the given [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorStop.html#value).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorStop.html#color)
     */
    color: Color;
    /**
     * A string value used to label the stop along the color ramp in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorStop.html#label)
     */
    label: string;
    /**
     * Specifies the data value to map to the given [color](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorStop.html#color).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorStop.html#value)
     */
    value: number;

    /**
     * Creates a deep clone of the ColorStop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorStop.html#clone)
     *
     *
     */
    clone(): ColorStop;
  }

  interface ColorStopConstructor {
    new (properties?: ColorStopProperties): ColorStop;

    fromJSON(json: any): ColorStop;
  }

  export const ColorStop: ColorStopConstructor;

  interface ColorStopProperties {
    /**
     * The [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) used to render features with the given [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorStop.html#value).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorStop.html#color)
     */
    color?: Color | number[] | string;
    /**
     * A string value used to label the stop along the color ramp in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorStop.html#label)
     */
    label?: string;
    /**
     * Specifies the data value to map to the given [color](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorStop.html#color).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorStop.html#value)
     */
    value?: number;
  }

  interface OpacityStop extends Accessor, JSONSupport {
    /**
     * A string value used to label the stop in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-OpacityStop.html#label)
     */
    label: string;
    /**
     * The opacity value (between `0.0` and `1.0`) used to render features with the given [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-OpacityStop.html#value).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-OpacityStop.html#opacity)
     */
    opacity: number;
    /**
     * Specifies the data value to map to the given [opacity value](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-OpacityStop.html#opacity).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-OpacityStop.html#value)
     */
    value: number;

    /**
     * Creates a deep clone of the OpacityStop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-OpacityStop.html#clone)
     *
     *
     */
    clone(): OpacityStop;
  }

  interface OpacityStopConstructor {
    new (properties?: OpacityStopProperties): OpacityStop;

    fromJSON(json: any): OpacityStop;
  }

  export const OpacityStop: OpacityStopConstructor;

  interface OpacityStopProperties {
    /**
     * A string value used to label the stop in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-OpacityStop.html#label)
     */
    label?: string;
    /**
     * The opacity value (between `0.0` and `1.0`) used to render features with the given [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-OpacityStop.html#value).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-OpacityStop.html#opacity)
     */
    opacity?: number | number[] | string;
    /**
     * Specifies the data value to map to the given [opacity value](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-OpacityStop.html#opacity).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-OpacityStop.html#value)
     */
    value?: number;
  }

  interface SizeStop extends Accessor, JSONSupport {
    /**
     * A string value used to label the stop in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-SizeStop.html#label)
     */
    label: string;
    /**
     * The size value in points (between `0` and `90`) used to render features with the given [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-SizeStop.html#value).This value may also be autocast from a string in points or pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-SizeStop.html#size)
     */
    size: number;
    /**
     * Specifies the data value to map to the given [size](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-SizeStop.html#size).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-SizeStop.html#value)
     */
    value: number;

    /**
     * Creates a deep clone of the SizeStop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-SizeStop.html#clone)
     *
     *
     */
    clone(): SizeStop;
  }

  interface SizeStopConstructor {
    new (properties?: SizeStopProperties): SizeStop;

    fromJSON(json: any): SizeStop;
  }

  export const SizeStop: SizeStopConstructor;

  interface SizeStopProperties {
    /**
     * A string value used to label the stop in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-SizeStop.html#label)
     */
    label?: string;
    /**
     * The size value in points (between `0` and `90`) used to render features with the given [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-SizeStop.html#value).This value may also be autocast from a string in points or pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-SizeStop.html#size)
     */
    size?: number | string;
    /**
     * Specifies the data value to map to the given [size](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-SizeStop.html#size).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-SizeStop.html#value)
     */
    value?: number;
  }

  interface VisualVariable extends Accessor, JSONSupport {
    /**
     * The name of the numeric attribute field that contains the datavalues used to determine the color/opacity/size/rotation of each feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#field)
     */
    field: string;
    /**
     * An object providing options for displaying the visual variable inthe [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#legendOptions)
     */
    legendOptions: VisualVariableLegendOptions;
    /**
     * The visual variable type.**Possible values:** color | opacity | rotation | size
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#type)
     */
    readonly type: string;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression evaluating to a number.This expression can reference field values using the `$feature` global variableand perform mathematical calculations and logical evaluations at runtime. The values returned fromthis expression are the data used to drive the visualization. This takes precedence over [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#field).Therefore, this property is typically used as an alternative to [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#field) in visual variables.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#valueExpression)
     */
    valueExpression: string;
    /**
     * The title identifying and describing the associated[Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression as defined in the [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#valueExpression) property. This is displayedas the title of the corresponding visual variable in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) in the absence of aprovided `title` in the [legendOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#legendOptions) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#valueExpressionTitle)
     */
    valueExpressionTitle: string;
  }

  interface VisualVariableConstructor {
    new (properties?: VisualVariableProperties): VisualVariable;

    fromJSON(json: any): VisualVariable;
  }

  export const VisualVariable: VisualVariableConstructor;

  interface VisualVariableProperties {
    /**
     * The name of the numeric attribute field that contains the datavalues used to determine the color/opacity/size/rotation of each feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#field)
     */
    field?: string;
    /**
     * An object providing options for displaying the visual variable inthe [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#legendOptions)
     */
    legendOptions?: VisualVariableLegendOptions;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression evaluating to a number.This expression can reference field values using the `$feature` global variableand perform mathematical calculations and logical evaluations at runtime. The values returned fromthis expression are the data used to drive the visualization. This takes precedence over [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#field).Therefore, this property is typically used as an alternative to [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#field) in visual variables.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#valueExpression)
     */
    valueExpression?: string;
    /**
     * The title identifying and describing the associated[Arcade](https://developers.arcgis.com/javascript/latest/guide/arcade/index.html) expression as defined in the [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#valueExpression) property. This is displayedas the title of the corresponding visual variable in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) in the absence of aprovided `title` in the [legendOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#legendOptions) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#valueExpressionTitle)
     */
    valueExpressionTitle?: string;
  }

  export interface VisualVariableLegendOptions extends Object {
    /**
     * Indicates whether to show the visual variable in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#legendOptions)
     */
    showLegend?: boolean;
    /**
     * The title describing the visualization of  the visual variable in the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html). This takes precedence over  a field alias or [valueExpressionTitle](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#valueExpressionTitle).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#legendOptions)
     */
    title?: string;
  }

  /**
   * ClassBreaksRenderer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers.html#ClassBreaksRenderer)
   */
  export type renderersClassBreaksRenderer = ClassBreaksRenderer;

  /**
   * DotDensityRenderer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers.html#DotDensityRenderer)
   */
  export type renderersDotDensityRenderer = DotDensityRenderer;

  /**
   * HeatmapRenderer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers.html#HeatmapRenderer)
   */
  export type renderersHeatmapRenderer = HeatmapRenderer;

  /**
   * RasterRenderer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers.html#RasterRenderer)
   */
  export type RasterRenderer = ClassBreaksRenderer | UniqueValueRenderer;

  /**
   * Renderer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers.html#Renderer)
   */
  export type renderersRenderer = HeatmapRenderer | RendererWithVisualVariables;

  /**
   * RendererWithVisualVariables.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers.html#RendererWithVisualVariables)
   */
  export type RendererWithVisualVariables =
    | SimpleRenderer
    | ClassBreaksRenderer
    | UniqueValueRenderer
    | DotDensityRenderer;

  /**
   * SimpleRenderer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers.html#SimpleRenderer)
   */
  export type renderersSimpleRenderer = SimpleRenderer;

  /**
   * UniqueValueRenderer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers.html#UniqueValueRenderer)
   */
  export type renderersUniqueValueRenderer = UniqueValueRenderer;

  interface request {
    /**
     * Retrieves data from a remote server or uploads a file from a user's computer. If the request returns an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html),the error object will include the details specified in [EsriErrorDetails](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#EsriErrorDetails).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)
     *
     * @param url The request URL.
     * @param options The options specified by the user in the data request. See [RequestOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions) for available properties.
     *
     */
    esriRequest(url: string, options?: RequestOptions): IPromise<RequestResponse>;
  }

  const __requestMapped: request;
  export const request: typeof __requestMapped.esriRequest;

  /**
   * The specification of the [details object](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html#details) returned in an[Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) object.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#EsriErrorDetails)
   */
  export interface EsriErrorDetails extends Object {
    /**
     * A function to retrieve headers sent from the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#EsriErrorDetails)
     */
    getHeader: GetHeader;
    /**
     * The status of the http request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#EsriErrorDetails)
     */
    httpStatus: number;
    /**
     * The error message code.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#EsriErrorDetails)
     */
    messageCode: string;
    /**
     * Additional error message(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#EsriErrorDetails)
     */
    messages: string[];
    /**
     * The query parameters sent with the http request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#EsriErrorDetails)
     */
    requestOptions: any;
    /**
     * Indicates if the request required https.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#EsriErrorDetails)
     */
    ssl: boolean;
    /**
     * The error message subcode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#EsriErrorDetails)
     */
    subCode: number;
    /**
     * The URL of the request that returned an error message.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#EsriErrorDetails)
     */
    url: string;
  }

  export type GetHeader = (headerName: string) => string;

  /**
   * An object with the following properties that describe the request.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions)
   */
  export interface RequestOptions extends Object {
    /**
     * Indicates if and how requests to ArcGIS Services are authenticated.Only applicable when [`esriConfig.request.useIdentity = true`](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#request).| Known Value | Description ||-------------|-------------|| auto |  The user will be signed in when a secure resource is requested. || anonymous | An error will be returned when a secure resource is requested. || immediate | The user will be signed in before the resource is requested. || no-prompt | Checks for whether the user is already signed in. If so, no additional prompts display for sign-in. |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions)
     */
    authMode?: string;
    /**
     * If uploading a file, specify theform data or element used to submit the file here. If specified, the parameters of the`query` will be added to the URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions)
     */
    body?: FormData | HTMLFormElement | string;
    /**
     * If `true`, the browser will send a request to the server instead of using thebrowser's local cache. If `false`, the browser's default cache handling will be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions)
     */
    cacheBust?: boolean;
    /**
     * Headers to use for the request. This is anobject whose property names are header names.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions)
     */
    headers?: any;
    /**
     * Indicates if the request should be made using theHTTP POST method. By default, this is determined automatically based on the request size.**Possible Values:** auto | post
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions)
     */
    method?: string;
    /**
     * Query parameters for the request.The query parameters will be added to the URL if:a GET request is used, or if the `body` property is set.Otherwise, the query parameters will be added to the body request parameters if:the `body` property is not set, and a POST request is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions)
     */
    query?: any;
    /**
     * Response format.**Possible Values:** json | xml | text | blob | array-buffer | document | image
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions)
     */
    responseType?: string;
    /**
     * [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) allows for cancelable requests.If canceled, the promise will be rejected with an error named `AbortError`.See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).Example:```jsconst controller = new AbortController();const signal = controller.signal;esriRequest(url, { signal })  .then((response) => {    // The request went OK  })  .catch((err) => {    if (err.name === 'AbortError') {      console.log('Request aborted');    } else {      console.error('Error encountered', err);    }  });// Abort requests that are aware of the controller's signalcontroller.abort();```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions)
     */
    signal?: AbortSignal;
    /**
     * Indicates the amount of time in millisecondsto wait for a response from the server. Set to `0` to wait for the response indefinitely.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions)
     */
    timeout?: number;
    /**
     * Indicates the request should use the proxy. By defaultthis is determined automatically based on the domain of the request URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions)
     */
    useProxy?: boolean;
  }

  /**
   * Returns a promise that resolves to an object with the following specification.If the request returns an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html), the error object willinclude the details specified in [EsriErrorDetails](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#EsriErrorDetails).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestResponse)
   */
  export interface RequestResponse extends Object {
    /**
     * The requested data. Should match the `responseType` with the data return type. Possible types are:[json](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object),[xml](https://developer.mozilla.org/en-US/docs/Web/API/XMLDocument),[text](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String),[blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob),[array-buffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer),[document](https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument), and[image](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestResponse)
     */
    data?: any;
    /**
     * The options specified by the user in the data request. See [RequestOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions) for available properties.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestResponse)
     */
    requestOptions?: RequestOptions;
    /**
     * Indicates if the request required https.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestResponse)
     */
    ssl?: boolean;
    /**
     * The URL used to request the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestResponse)
     */
    url?: string;
    /**
     * Method for getting a header sent from the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestResponse)
     */
    getHeader?: GetHeader;
  }

  interface ActionBase {
    /**
     * Indicates whether the action is currently active.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionBase.html#active)
     *
     * @default false
     */
    active: boolean;
    /**
     * Adds a CSS class to the action's node. Can be used in conjunction with the`image` property or by itself. Any icon font may be used in this property.The [Esri Icon Font](https://developers.arcgis.com/javascript/latest/guide/esri-icon-font/index.html) isautomatically made available via the ArcGIS API for JavaScript for you touse in styling custom actions. To use one of these provided icon fonts, you mustprefix the class name with `esri-`. For example, the default `zoom-to` action in[Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) uses the font `esri-icon-zoom-in-magnifying-glass`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionBase.html#className)
     */
    className: string;
    /**
     * Indicates whether this action is disabled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionBase.html#disabled)
     *
     * @default false
     */
    disabled: boolean;
    /**
     * The name of the ID assigned to this action. This is used for differentiating actionswhen listening to the [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionBase.html#event-trigger-action) event.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionBase.html#id)
     */
    id: string;
    /**
     * The title of the action._For popups_: When there are fewer than three actionsdefined in a popup, this text is displayed to the right of the icon or imagerepresenting the action. If there are three or more actions in the popup, thenthis text is used as a tooltip on the action._For LayerList_: The first action is displayed in the layerlist with an icon.The layerlist has a menu that will display all actions with their titles
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionBase.html#title)
     */
    title: string;
    /**
     * Specifies the type of action. Choose between ["button"](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html) or ["toggle"](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html).Currently, these two are the only supported types. A "slider" type will follow-up in a future release.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionBase.html#type)
     *
     * @default null
     */
    type: string;
    /**
     * Indicates if the action is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionBase.html#visible)
     *
     * @default true
     */
    visible: boolean;
  }

  interface ActionBaseConstructor {
    new (): ActionBase;
  }

  export const ActionBase: ActionBaseConstructor;

  interface ActionButton extends ActionBase {
    /**
     * The URL to an image that will be used to represent the action.This property will be used as a background image for the node.It may be used in conjunction with the `className` property or by itself.If neither `image` nor `className` are specified, a default icon![default icon](https://developers.arcgis.com/javascript/assets/img/guide/whats-new/41/default-action.png) will display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html#image)
     */
    image: string;

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html#clone)
     *
     *
     */
    clone(): ActionButton;
  }

  interface ActionButtonConstructor {
    new (properties?: any): ActionButton;
  }

  export const ActionButton: ActionButtonConstructor;

  interface ActionToggle extends ActionBase {
    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html#clone)
     *
     *
     */
    clone(): ActionToggle;
  }

  interface ActionToggleConstructor {
    new (properties?: any): ActionToggle;
  }

  export const ActionToggle: ActionToggleConstructor;

  interface LayersMixin {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-LayersMixin.html#layers)
     */
    layers: Collection<Layer>;

    /**
     * Adds a layer to the [layers collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-LayersMixin.html#layers).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-LayersMixin.html#add)
     *
     * @param layer Layer or a promise that resolves to a layer to add to the [layers collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-LayersMixin.html#layers).
     * @param index A layer can be added at a specified index in the [layers collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-LayersMixin.html#layers).                        If no index is specified or the index specified is greater                        than the current number of layers, the layer is automatically                        appended to the list of layers in the [layers collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-LayersMixin.html#layers) and the index is                        normalized.
     *
     */
    add(layer: Layer | IPromise<any>, index?: number): void;
    /**
     * Adds a layer or an array of layers to the [layers collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-LayersMixin.html#layers).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-LayersMixin.html#addMany)
     *
     * @param layers Layer(s) to be added to the [layers collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-LayersMixin.html#layers).
     * @param index A layer can be added at a specified index in the [layers collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-LayersMixin.html#layers).                        If no index is specified or the index specified is greater                        than the current number of layers, the layer is automatically                        appended to the list of layers in the [layers collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-LayersMixin.html#layers) and the index is                        normalized.
     *
     */
    addMany(layers: Layer[], index?: number): void;
    /**
     * Returns a layer based on the given layer id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-LayersMixin.html#findLayerById)
     *
     * @param layerId The ID assigned to the layer.
     *
     */
    findLayerById(layerId: string): Layer;
    /**
     * Removes the specified layer from the layers collection.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-LayersMixin.html#remove)
     *
     * @param layer Layer to remove from the layers collection.
     *
     */
    remove(layer: Layer): Layer;
    /**
     * Removes all layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-LayersMixin.html#removeAll)
     *
     *
     */
    removeAll(): Layer[];
    /**
     * Removes the specified layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-LayersMixin.html#removeMany)
     *
     * @param layers Array of layers to remove from the layers collection.
     *
     */
    removeMany(layers: Layer[]): Layer[];
    /**
     * Changes the layer order. The first layer added is always the base layer,even if its order is changed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-LayersMixin.html#reorder)
     *
     * @param layer The layer to be moved.
     * @param index The index location for placing the layer. The bottom-most                        layer has an index of `0`.
     *
     */
    reorder(layer: Layer, index: number): Layer;
  }

  interface LayersMixinConstructor {
    new (): LayersMixin;
  }

  export const LayersMixin: LayersMixinConstructor;

  interface LayersMixinProperties {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-LayersMixin.html#layers)
     */
    layers?: CollectionProperties<LayerProperties> | LayerProperties[];
  }

  namespace symbols {
    /**
     * CIMSymbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#CIMSymbol)
     */
    export type CIMSymbol = __esri.CIMSymbol;
    export const CIMSymbol: typeof __esri.CIMSymbol;

    /**
     * ExtrudeSymbol3DLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#ExtrudeSymbol3DLayer)
     */
    export type ExtrudeSymbol3DLayer = __esri.ExtrudeSymbol3DLayer;
    export const ExtrudeSymbol3DLayer: typeof __esri.ExtrudeSymbol3DLayer;

    /**
     * FillSymbol3DLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#FillSymbol3DLayer)
     */
    export type FillSymbol3DLayer = __esri.FillSymbol3DLayer;
    export const FillSymbol3DLayer: typeof __esri.FillSymbol3DLayer;

    /**
     * WaterSymbol3DLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#WaterSymbol3DLayer)
     */
    export type WaterSymbol3DLayer = __esri.WaterSymbol3DLayer;
    export const WaterSymbol3DLayer: typeof __esri.WaterSymbol3DLayer;

    /**
     * Font.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#Font)
     */
    export type Font = __esri.Font;
    export const Font: typeof __esri.Font;

    /**
     * IconSymbol3DLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#IconSymbol3DLayer)
     */
    export type IconSymbol3DLayer = __esri.IconSymbol3DLayer;
    export const IconSymbol3DLayer: typeof __esri.IconSymbol3DLayer;

    /**
     * LabelSymbol3D.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#LabelSymbol3D)
     */
    export type LabelSymbol3D = __esri.LabelSymbol3D;
    export const LabelSymbol3D: typeof __esri.LabelSymbol3D;

    /**
     * LineSymbol3D.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#LineSymbol3D)
     */
    export type LineSymbol3D = __esri.LineSymbol3D;
    export const LineSymbol3D: typeof __esri.LineSymbol3D;

    /**
     * LineSymbol3DLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#LineSymbol3DLayer)
     */
    export type LineSymbol3DLayer = __esri.LineSymbol3DLayer;
    export const LineSymbol3DLayer: typeof __esri.LineSymbol3DLayer;

    /**
     * MeshSymbol3D.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#MeshSymbol3D)
     */
    export type MeshSymbol3D = __esri.MeshSymbol3D;
    export const MeshSymbol3D: typeof __esri.MeshSymbol3D;

    /**
     * ObjectSymbol3DLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#ObjectSymbol3DLayer)
     */
    export type ObjectSymbol3DLayer = __esri.ObjectSymbol3DLayer;
    export const ObjectSymbol3DLayer: typeof __esri.ObjectSymbol3DLayer;

    /**
     * PathSymbol3DLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#PathSymbol3DLayer)
     */
    export type PathSymbol3DLayer = __esri.PathSymbol3DLayer;
    export const PathSymbol3DLayer: typeof __esri.PathSymbol3DLayer;

    /**
     * PictureFillSymbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#PictureFillSymbol)
     */
    export type PictureFillSymbol = __esri.PictureFillSymbol;
    export const PictureFillSymbol: typeof __esri.PictureFillSymbol;

    /**
     * PictureMarkerSymbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#PictureMarkerSymbol)
     */
    export type PictureMarkerSymbol = __esri.PictureMarkerSymbol;
    export const PictureMarkerSymbol: typeof __esri.PictureMarkerSymbol;

    /**
     * PointSymbol3D.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#PointSymbol3D)
     */
    export type PointSymbol3D = __esri.PointSymbol3D;
    export const PointSymbol3D: typeof __esri.PointSymbol3D;

    /**
     * PolygonSymbol3D.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#PolygonSymbol3D)
     */
    export type PolygonSymbol3D = __esri.PolygonSymbol3D;
    export const PolygonSymbol3D: typeof __esri.PolygonSymbol3D;

    /**
     * SimpleFillSymbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#SimpleFillSymbol)
     */
    export type SimpleFillSymbol = __esri.SimpleFillSymbol;
    export const SimpleFillSymbol: typeof __esri.SimpleFillSymbol;

    /**
     * SimpleLineSymbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#SimpleLineSymbol)
     */
    export type SimpleLineSymbol = __esri.SimpleLineSymbol;
    export const SimpleLineSymbol: typeof __esri.SimpleLineSymbol;

    /**
     * SimpleMarkerSymbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#SimpleMarkerSymbol)
     */
    export type SimpleMarkerSymbol = __esri.SimpleMarkerSymbol;
    export const SimpleMarkerSymbol: typeof __esri.SimpleMarkerSymbol;

    /**
     * TextSymbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#TextSymbol)
     */
    export type TextSymbol = __esri.TextSymbol;
    export const TextSymbol: typeof __esri.TextSymbol;

    /**
     * TextSymbol3DLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#TextSymbol3DLayer)
     */
    export type TextSymbol3DLayer = __esri.TextSymbol3DLayer;
    export const TextSymbol3DLayer: typeof __esri.TextSymbol3DLayer;

    /**
     * WebStyleSymbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#WebStyleSymbol)
     */
    export type WebStyleSymbol = __esri.WebStyleSymbol;
    export const WebStyleSymbol: typeof __esri.WebStyleSymbol;

    /**
     * FillSymbol types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#FillSymbol)
     */
    export type FillSymbol = __esri.PictureFillSymbol | __esri.SimpleFillSymbol;

    /**
     * MarkerSymbol types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#MarkerSymbol)
     */
    export type MarkerSymbol = __esri.PictureMarkerSymbol | __esri.SimpleMarkerSymbol;

    /**
     * Symbol2D types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#Symbol2D)
     */
    export type Symbol2D =
      | __esri.PictureFillSymbol
      | __esri.PictureMarkerSymbol
      | __esri.SimpleFillSymbol
      | __esri.SimpleLineSymbol
      | __esri.SimpleMarkerSymbol
      | __esri.TextSymbol;

    /**
     * Symbol2D3D types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#Symbol2D3D)
     */
    export type Symbol2D3D =
      | __esri.PictureFillSymbol
      | __esri.PictureMarkerSymbol
      | __esri.SimpleFillSymbol
      | __esri.SimpleLineSymbol
      | __esri.SimpleMarkerSymbol
      | __esri.TextSymbol
      | __esri.Symbol2D
      | __esri.LabelSymbol3D
      | __esri.LineSymbol3D
      | __esri.MeshSymbol3D
      | __esri.PointSymbol3D
      | __esri.PolygonSymbol3D;

    /**
     * Symbol types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#Symbol)
     */
    export type Symbol = __esri.Symbol2D | __esri.symbolsSymbol3D | __esri.WebStyleSymbol;

    /**
     * Symbol3DLayer types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#Symbol3DLayer)
     */
    export type Symbol3DLayer =
      | __esri.ExtrudeSymbol3DLayer
      | __esri.FillSymbol3DLayer
      | __esri.WaterSymbol3DLayer
      | __esri.IconSymbol3DLayer
      | __esri.LineSymbol3DLayer
      | __esri.ObjectSymbol3DLayer
      | __esri.PathSymbol3DLayer
      | __esri.TextSymbol3DLayer;

    /**
     * Symbol3D types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#Symbol3D)
     */
    export type Symbol3D =
      | __esri.LabelSymbol3D
      | __esri.LineSymbol3D
      | __esri.MeshSymbol3D
      | __esri.PointSymbol3D
      | __esri.PolygonSymbol3D;
  }

  interface Callout3D extends Accessor, JSONSupport {
    /**
     * Creates a deep clone of the callout.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-Callout3D.html#clone)
     *
     *
     */
    clone(): Callout3D;
  }

  interface Callout3DConstructor {
    new (properties?: Callout3DProperties): Callout3D;

    fromJSON(json: any): Callout3D;
  }

  export const Callout3D: Callout3DConstructor;

  interface Callout3DProperties {}

  interface LineCallout3D extends Callout3D {
    /**
     * The border settings of the callout line. The border of the callout line can be usedto improve the contrast of the callout line color against various background colors. If the border is `null`,then no border will be visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html#border)
     */
    border: LineCallout3DBorder;
    /**
     * The color of the callout line.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html#color)
     *
     * @default black
     */
    color: Color;
    /**
     * The width of the callout line in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html#size)
     *
     * @default 1px
     */
    size: number;
    /**
     * For LineCallout3D the type is always `line`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html#type)
     */
    type: string;

    /**
     * Creates a deep clone of the callout.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html#clone)
     *
     *
     */
    clone(): LineCallout3D;
  }

  interface LineCallout3DConstructor {
    new (properties?: LineCallout3DProperties): LineCallout3D;

    fromJSON(json: any): LineCallout3D;
  }

  export const LineCallout3D: LineCallout3DConstructor;

  interface LineCallout3DProperties extends Callout3DProperties {
    /**
     * The border settings of the callout line. The border of the callout line can be usedto improve the contrast of the callout line color against various background colors. If the border is `null`,then no border will be visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html#border)
     */
    border?: LineCallout3DBorderProperties;
    /**
     * The color of the callout line.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html#color)
     *
     * @default black
     */
    color?: Color | number[] | string;
    /**
     * The width of the callout line in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html#size)
     *
     * @default 1px
     */
    size?: number | string;
    /**
     * For LineCallout3D the type is always `line`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html#type)
     */
    type?: string;
  }

  export interface LineCallout3DBorderProperties extends Object {
    /**
     * The color of the callout line border.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html#border)
     *
     * @default white
     */
    color?: Color | number[] | string;
  }

  export interface LineCallout3DBorder extends AnonymousAccessor {
    /**
     * The color of the callout line border.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html#border)
     *
     * @default white
     */
    color?: Color;
  }

  interface CIMSymbol extends Symbol {
    /**
     * The JSON payload of the CIM symbol
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-CIMSymbol.html#data)
     */
    data: any;
    /**
     * For CIMSymbol, the type is always `cim`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-CIMSymbol.html#type)
     */
    readonly type: "cim";

    /**
     * Creates a deep clone of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-CIMSymbol.html#clone)
     *
     *
     */
    clone(): CIMSymbol;
  }

  interface CIMSymbolConstructor {
    new (properties?: CIMSymbolProperties): CIMSymbol;

    fromJSON(json: any): CIMSymbol;
  }

  export const CIMSymbol: CIMSymbolConstructor;

  interface CIMSymbolProperties extends SymbolProperties {
    /**
     * The JSON payload of the CIM symbol
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-CIMSymbol.html#data)
     */
    data?: any;
  }

  interface Edges3D extends Accessor, JSONSupport {
    /**
     * The color of the edges.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-Edges3D.html#color)
     *
     * @default black
     */
    color: Color;
    /**
     * A size in points by which to extend edges beyond their original end points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-Edges3D.html#extensionLength)
     *
     * @default "0"
     */
    extensionLength: number;
    /**
     * The size of the edges in points. This value may be autocast with a string expressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-Edges3D.html#size)
     *
     * @default 1px
     */
    size: number;

    /**
     * Creates a deep clone of the edges.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-Edges3D.html#clone)
     *
     *
     */
    clone(): Edges3D;
  }

  interface Edges3DConstructor {
    new (properties?: Edges3DProperties): Edges3D;

    fromJSON(json: any): Edges3D;
  }

  export const Edges3D: Edges3DConstructor;

  interface Edges3DProperties {
    /**
     * The color of the edges.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-Edges3D.html#color)
     *
     * @default black
     */
    color?: Color | number[] | string;
    /**
     * A size in points by which to extend edges beyond their original end points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-Edges3D.html#extensionLength)
     *
     * @default "0"
     */
    extensionLength?: number | string;
    /**
     * The size of the edges in points. This value may be autocast with a string expressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-Edges3D.html#size)
     *
     * @default 1px
     */
    size?: number | string;
  }

  interface SketchEdges3D extends Edges3D {
    /**
     * For SketchEdges3D the type is always `sketch`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-SketchEdges3D.html#type)
     */
    type: "sketch";

    /**
     * Creates a deep clone of the object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-SketchEdges3D.html#clone)
     *
     *
     */
    clone(): SketchEdges3D;
  }

  interface SketchEdges3DConstructor {
    new (properties?: SketchEdges3DProperties): SketchEdges3D;

    fromJSON(json: any): SketchEdges3D;
  }

  export const SketchEdges3D: SketchEdges3DConstructor;

  interface SketchEdges3DProperties extends Edges3DProperties {
    /**
     * For SketchEdges3D the type is always `sketch`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-SketchEdges3D.html#type)
     */
    type?: "sketch";
  }

  interface SolidEdges3D extends Edges3D {
    /**
     * For SolidEdges3D the type is always `solid`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-SolidEdges3D.html#type)
     */
    type: "solid";

    /**
     * Creates a deep clone of the object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-SolidEdges3D.html#clone)
     *
     *
     */
    clone(): SolidEdges3D;
  }

  interface SolidEdges3DConstructor {
    new (properties?: SolidEdges3DProperties): SolidEdges3D;

    fromJSON(json: any): SolidEdges3D;
  }

  export const SolidEdges3D: SolidEdges3DConstructor;

  interface SolidEdges3DProperties extends Edges3DProperties {
    /**
     * For SolidEdges3D the type is always `solid`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-SolidEdges3D.html#type)
     */
    type?: "solid";
  }

  interface ExtrudeSymbol3DLayer extends Symbol3DLayer {
    /**
     * Indicates whether the symbol layer geometry casts shadows in the scene.Setting this property to `false` will disable shadows for the symbol layereven if direct shadows are enabled in[SceneView.environment](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#castShadows)
     *
     * @default true
     */
    castShadows: boolean;
    /**
     * Sets the contour edges on polygons symbolized with ExtrudeSymbol3DLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#edges)
     */
    edges: Edges3D;
    /**
     * The material used to shade the extrusion. This property defines the extrusion's color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#material)
     */
    material: ExtrudeSymbol3DLayerMaterial;
    /**
     * The height of the extrusion in meters. Negative values will extrude thepolygon surface downward towards or below the ground.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#size)
     *
     * @default 1
     */
    size: number;
    /**
     * For ExtrudeSymbol3DLayer the type is always `extrude`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#type)
     */
    readonly type: "extrude";

    /**
     * Creates a deep clone of the symbol layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#clone)
     *
     *
     */
    clone(): ExtrudeSymbol3DLayer;
  }

  interface ExtrudeSymbol3DLayerConstructor {
    new (properties?: ExtrudeSymbol3DLayerProperties): ExtrudeSymbol3DLayer;

    fromJSON(json: any): ExtrudeSymbol3DLayer;
  }

  export const ExtrudeSymbol3DLayer: ExtrudeSymbol3DLayerConstructor;

  interface ExtrudeSymbol3DLayerProperties extends Symbol3DLayerProperties {
    /**
     * Indicates whether the symbol layer geometry casts shadows in the scene.Setting this property to `false` will disable shadows for the symbol layereven if direct shadows are enabled in[SceneView.environment](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#castShadows)
     *
     * @default true
     */
    castShadows?: boolean;
    /**
     * Sets the contour edges on polygons symbolized with ExtrudeSymbol3DLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#edges)
     */
    edges?: Edges3DProperties;
    /**
     * The material used to shade the extrusion. This property defines the extrusion's color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#material)
     */
    material?: ExtrudeSymbol3DLayerMaterialProperties;
    /**
     * The height of the extrusion in meters. Negative values will extrude thepolygon surface downward towards or below the ground.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#size)
     *
     * @default 1
     */
    size?: number;
  }

  export interface ExtrudeSymbol3DLayerMaterialProperties extends Object {
    /**
     * The fill color of the extrusion.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#material)
     *
     * @default white
     */
    color?: Color | number[] | string;
  }

  export interface ExtrudeSymbol3DLayerMaterial extends AnonymousAccessor {
    /**
     * The fill color of the extrusion.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#material)
     *
     * @default white
     */
    color?: Color;
  }

  interface FillSymbol extends Symbol {
    /**
     * The outline of the polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol.html#outline)
     */
    outline: SimpleLineSymbol;
  }

  interface FillSymbolConstructor {
    new (properties?: FillSymbolProperties): FillSymbol;

    fromJSON(json: any): FillSymbol;
  }

  export const FillSymbol: FillSymbolConstructor;

  interface FillSymbolProperties extends SymbolProperties {
    /**
     * The outline of the polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol.html#outline)
     */
    outline?: SimpleLineSymbolProperties;
  }

  interface FillSymbol3DLayer extends Symbol3DLayer {
    /**
     * Indicates whether the symbol layer geometry casts shadows in the scene.Setting this property to `false` will disable shadows for the symbol layereven if direct shadows are enabled in[SceneView.environment](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment).This property applies only to [MeshSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MeshSymbol3D.html) symbols.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#castShadows)
     *
     * @default true
     */
    castShadows: boolean;
    /**
     * Sets the contour edges on 3D Objects. This is only applicable for [MeshSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MeshSymbol3D.html).![symbol3D-edges-solid](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbol3d-edges-solid-2.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#edges)
     */
    edges: Edges3D;
    /**
     * The material defines the final color of the graphic,by blending the `color` property set in the material with thefeature's geometry color/texture information. `colorMixMode` defines how thesecolors are mixed together.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material)
     */
    material: FillSymbol3DLayerMaterial;
    /**
     * The outline used to draw a line around the filled geometry.This property is not supported in [MeshSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MeshSymbol3D.html) symbol layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#outline)
     */
    outline: FillSymbol3DLayerOutline;
    /**
     * For FillSymbol3DLayer the type is always `fill`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#type)
     */
    readonly type: "fill";

    /**
     * Creates a deep clone of the symbol layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#clone)
     *
     *
     */
    clone(): FillSymbol3DLayer;
  }

  interface FillSymbol3DLayerConstructor {
    new (properties?: FillSymbol3DLayerProperties): FillSymbol3DLayer;

    fromJSON(json: any): FillSymbol3DLayer;
  }

  export const FillSymbol3DLayer: FillSymbol3DLayerConstructor;

  interface FillSymbol3DLayerProperties extends Symbol3DLayerProperties {
    /**
     * Indicates whether the symbol layer geometry casts shadows in the scene.Setting this property to `false` will disable shadows for the symbol layereven if direct shadows are enabled in[SceneView.environment](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment).This property applies only to [MeshSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MeshSymbol3D.html) symbols.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#castShadows)
     *
     * @default true
     */
    castShadows?: boolean;
    /**
     * Sets the contour edges on 3D Objects. This is only applicable for [MeshSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MeshSymbol3D.html).![symbol3D-edges-solid](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbol3d-edges-solid-2.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#edges)
     */
    edges?: Edges3DProperties;
    /**
     * The material defines the final color of the graphic,by blending the `color` property set in the material with thefeature's geometry color/texture information. `colorMixMode` defines how thesecolors are mixed together.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material)
     */
    material?: FillSymbol3DLayerMaterialProperties;
    /**
     * The outline used to draw a line around the filled geometry.This property is not supported in [MeshSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MeshSymbol3D.html) symbol layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#outline)
     */
    outline?: FillSymbol3DLayerOutlineProperties;
  }

  export interface FillSymbol3DLayerMaterialProperties extends Object {
    /**
     * The color of the fill.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material)
     *
     * @default white
     */
    color?: Color | number[] | string;
    /**
     * Specifies how the material `color` is applied to the geometry color/texture information.This property applies only to [MeshSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MeshSymbol3D.html) symbols.Value | Description------|------------tint | Applies the material `color` to the desaturated geometry/texture color.replace | Removes the geometry/texture color and applies the material `color`.multiply | Multiplies geometry/texture color value with the material `color` value. The result is a darker color. Multiplying with white keeps the geometry color the same.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material)
     *
     * @default multiply
     */
    colorMixMode?: string;
  }

  export interface FillSymbol3DLayerMaterial extends AnonymousAccessor {
    /**
     * The color of the fill.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material)
     *
     * @default white
     */
    color?: Color;
    /**
     * Specifies how the material `color` is applied to the geometry color/texture information.This property applies only to [MeshSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MeshSymbol3D.html) symbols.Value | Description------|------------tint | Applies the material `color` to the desaturated geometry/texture color.replace | Removes the geometry/texture color and applies the material `color`.multiply | Multiplies geometry/texture color value with the material `color` value. The result is a darker color. Multiplying with white keeps the geometry color the same.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material)
     *
     * @default multiply
     */
    colorMixMode?: string;
  }

  export interface FillSymbol3DLayerOutlineProperties extends Object {
    /**
     * The color of the outline.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#outline)
     */
    color?: Color | number[] | string;
    /**
     * The width of the outline in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#outline)
     */
    size?: number | string;
  }

  export interface FillSymbol3DLayerOutline extends AnonymousAccessor {
    /**
     * The color of the outline.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#outline)
     */
    color: Color;
    /**
     * The width of the outline in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#outline)
     */
    size: number;
  }

  interface Font extends Accessor, JSONSupport {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#decoration)
     *
     * @default none
     */
    decoration: "underline" | "line-through" | "none";
    /**
     * The font family of the text. The possible values are dependent upon thelayer type, and if you working with a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). See the [Labeling guide page](https://developers.arcgis.com/javascript/latest/guide/labeling/index.html)for detailed explanation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#family)
     *
     * @default sans-serif
     */
    family: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#size)
     *
     * @default 9
     */
    size: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#style)
     *
     * @default normal
     */
    style: "normal" | "italic" | "oblique";
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#weight)
     *
     * @default normal
     */
    weight: "normal" | "bold" | "bolder" | "lighter";

    /**
     * Creates a deep clone of the font object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#clone)
     *
     *
     */
    clone(): Font;
  }

  interface FontConstructor {
    new (properties?: FontProperties): Font;

    fromJSON(json: any): Font;
  }

  export const Font: FontConstructor;

  interface FontProperties {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#decoration)
     *
     * @default none
     */
    decoration?: "underline" | "line-through" | "none";
    /**
     * The font family of the text. The possible values are dependent upon thelayer type, and if you working with a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). See the [Labeling guide page](https://developers.arcgis.com/javascript/latest/guide/labeling/index.html)for detailed explanation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#family)
     *
     * @default sans-serif
     */
    family?: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#size)
     *
     * @default 9
     */
    size?: number | string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#style)
     *
     * @default normal
     */
    style?: "normal" | "italic" | "oblique";
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#weight)
     *
     * @default normal
     */
    weight?: "normal" | "bold" | "bolder" | "lighter";
  }

  interface IconSymbol3DLayer extends Symbol3DLayer {
    /**
     * The positioning of the icon relative to the geometry.**Possible values:** center | left | right | top |bottom | top-left | top-right | bottom-left | bottom-right
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#anchor)
     *
     * @default center
     */
    anchor: string;
    /**
     * Defines the [anchor](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#anchor) relative to the center of the icon. It is specified as a ratio of the icon's dimensions.For example, a value of `{ x: 0, y: 0 }` designates the center of the icon, while a value of `{ x: -0.5, y: -0.5 }`causes the top-left corner of the icon to coincide with the feature geometry.This property only applies when [anchor](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#anchor) is set to `relative`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#anchorPosition)
     */
    anchorPosition: IconSymbol3DLayerAnchorPosition;
    /**
     * The material used to shade the icon. This property defines the icon's color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#material)
     */
    material: IconSymbol3DLayerMaterial;
    /**
     * The outline of the icon. The color property of this object directly modifies the overallcolor of IconSymbol3DLayer defined with the `cross` or `x` primitive.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#outline)
     */
    outline: IconSymbol3DLayerOutline;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#resource)
     *
     * @default { primitive: "circle" }
     */
    resource: IconSymbol3DLayerResource;
    /**
     * The size of the icon in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#size)
     *
     * @default 12
     */
    size: number;
    /**
     * For IconSymbol3DLayer the type is always `icon`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#type)
     */
    readonly type: "icon";

    /**
     * Creates a deep clone of the symbol layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#clone)
     *
     *
     */
    clone(): IconSymbol3DLayer;
  }

  interface IconSymbol3DLayerConstructor {
    new (properties?: IconSymbol3DLayerProperties): IconSymbol3DLayer;

    fromJSON(json: any): IconSymbol3DLayer;
  }

  export const IconSymbol3DLayer: IconSymbol3DLayerConstructor;

  interface IconSymbol3DLayerProperties extends Symbol3DLayerProperties {
    /**
     * The positioning of the icon relative to the geometry.**Possible values:** center | left | right | top |bottom | top-left | top-right | bottom-left | bottom-right
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#anchor)
     *
     * @default center
     */
    anchor?: string;
    /**
     * Defines the [anchor](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#anchor) relative to the center of the icon. It is specified as a ratio of the icon's dimensions.For example, a value of `{ x: 0, y: 0 }` designates the center of the icon, while a value of `{ x: -0.5, y: -0.5 }`causes the top-left corner of the icon to coincide with the feature geometry.This property only applies when [anchor](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#anchor) is set to `relative`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#anchorPosition)
     */
    anchorPosition?: IconSymbol3DLayerAnchorPosition;
    /**
     * The material used to shade the icon. This property defines the icon's color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#material)
     */
    material?: IconSymbol3DLayerMaterialProperties;
    /**
     * The outline of the icon. The color property of this object directly modifies the overallcolor of IconSymbol3DLayer defined with the `cross` or `x` primitive.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#outline)
     */
    outline?: IconSymbol3DLayerOutlineProperties;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#resource)
     *
     * @default { primitive: "circle" }
     */
    resource?: IconSymbol3DLayerResource;
    /**
     * The size of the icon in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#size)
     *
     * @default 12
     */
    size?: number | string;
  }

  export interface IconSymbol3DLayerAnchorPosition extends Object {
    /**
     * Value defining the position relative to the icon's width.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#anchorPosition)
     */
    x: number;
    /**
     * Value defining the position relative to the icon's height.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#anchorPosition)
     */
    y: number;
  }

  export interface IconSymbol3DLayerMaterialProperties extends Object {
    /**
     * The fill color of the icon. If the icon uses animage as resource, each pixel of the image will be multiplied by this color.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#material)
     *
     * @default white
     */
    color?: Color | number[] | string;
  }

  export interface IconSymbol3DLayerMaterial extends AnonymousAccessor {
    /**
     * The fill color of the icon. If the icon uses animage as resource, each pixel of the image will be multiplied by this color.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#material)
     *
     * @default white
     */
    color?: Color;
  }

  export interface IconSymbol3DLayerOutlineProperties extends Object {
    /**
     * The color of the outline.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#outline)
     *
     * @default black
     */
    color?: Color | number[] | string;
    /**
     * The width of the outline in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#outline)
     *
     * @default 1.125
     */
    size?: number | string;
  }

  export interface IconSymbol3DLayerOutline extends AnonymousAccessor {
    /**
     * The color of the outline.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#outline)
     *
     * @default black
     */
    color?: Color;
    /**
     * The width of the outline in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#outline)
     *
     * @default 1.125
     */
    size?: number;
  }

  export interface IconSymbol3DLayerResource extends Object {
    /**
     * Uses a built-in shape. See the table below for list of possible values.Value | Description------|------------circle | ![s3d-icon-circle](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-icon-circle.png)square |  ![s3d-icon-square](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-icon-square.png)cross | ![s3d-icon-cross](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-icon-cross.png)x | ![s3d-icon-x](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-icon-x.png)kite | ![s3d-icon-kite](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-icon-kite.png)triangle | ![s3d-icon-triangle](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-icon-triangle.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#resource)
     */
    primitive?: string;
    /**
     * The URL or data URI for the image. If the external resource is an SVG then theSVG root node must have a set width and height, otherwise it will not render at the correct size. SVG isnot supported in IE11.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#resource)
     */
    href?: string;
  }

  interface LabelSymbol3D extends Symbol3D {
    /**
     * Settings for adding a callout visualization to the symbol. Callouts are drawn from the point feature location that is being symbolized,to the vertical offset of the symbol. This property has no effect if [verticalOffset](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#verticalOffset) is not set. At the moment only callouts of type `line` aresupported. See [LineCallout3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#callout)
     */
    callout: Callout3D;
    /**
     * For LabelSymbol3D the type is always `label-3d`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#type)
     */
    readonly type: "label-3d";
    /**
     * Shifts the symbol along the vertical world axis by a given height. The height is set in screen space units like points or pixels.For points displayed with a [callout](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#callout) `verticalOffset` should be set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#verticalOffset)
     */
    verticalOffset: LabelSymbol3DVerticalOffset;

    /**
     * Creates a deep clone of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#clone)
     *
     *
     */
    clone(): LabelSymbol3D;
  }

  interface LabelSymbol3DConstructor {
    new (properties?: LabelSymbol3DProperties): LabelSymbol3D;

    fromJSON(json: any): LabelSymbol3D;
  }

  export const LabelSymbol3D: LabelSymbol3DConstructor;

  interface LabelSymbol3DProperties extends Symbol3DProperties {
    /**
     * Settings for adding a callout visualization to the symbol. Callouts are drawn from the point feature location that is being symbolized,to the vertical offset of the symbol. This property has no effect if [verticalOffset](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#verticalOffset) is not set. At the moment only callouts of type `line` aresupported. See [LineCallout3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#callout)
     */
    callout?: Callout3DProperties;
    /**
     * Shifts the symbol along the vertical world axis by a given height. The height is set in screen space units like points or pixels.For points displayed with a [callout](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#callout) `verticalOffset` should be set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#verticalOffset)
     */
    verticalOffset?: LabelSymbol3DVerticalOffsetProperties;
  }

  export interface LabelSymbol3DVerticalOffsetProperties extends Object {
    /**
     * The vertical symbol offset in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#verticalOffset)
     */
    screenLength?: number;
    /**
     * The minimum vertical symbol offset in world units. It acts as a lower bound to avoid the vertical offset becoming too small.In the following animation the green symbol on the left has `minWorldLength = 20` and for the orange symbol on the right `minWorldLength` has not been set:![minWorldLength-on](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3D-line-callout-minWorldLength.gif)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#verticalOffset)
     */
    minWorldLength?: number;
    /**
     * The maximum vertical symbol offset in world units. It acts as an upper bound to avoid vertical offset becoming too big.In the following animation the green symbols have `maxWorldLength = 50` and orange symbols don't have `maxWorldLength` set:![maxWorldLength](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3D-line-callout-maxWorldLength.gif)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#verticalOffset)
     */
    maxWorldLength?: number;
  }

  export interface LabelSymbol3DVerticalOffset extends AnonymousAccessor {
    /**
     * The vertical symbol offset in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#verticalOffset)
     */
    screenLength: number;
    /**
     * The minimum vertical symbol offset in world units. It acts as a lower bound to avoid the vertical offset becoming too small.In the following animation the green symbol on the left has `minWorldLength = 20` and for the orange symbol on the right `minWorldLength` has not been set:![minWorldLength-on](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3D-line-callout-minWorldLength.gif)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#verticalOffset)
     */
    minWorldLength?: number;
    /**
     * The maximum vertical symbol offset in world units. It acts as an upper bound to avoid vertical offset becoming too big.In the following animation the green symbols have `maxWorldLength = 50` and orange symbols don't have `maxWorldLength` set:![maxWorldLength](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3D-line-callout-maxWorldLength.gif)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#verticalOffset)
     */
    maxWorldLength?: number;
  }

  interface LineSymbol extends Symbol {
    /**
     * The width of the symbol in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol.html#width)
     *
     * @default 0.75
     */
    width: number;
  }

  interface LineSymbolConstructor {
    new (properties?: LineSymbolProperties): LineSymbol;

    fromJSON(json: any): LineSymbol;
  }

  export const LineSymbol: LineSymbolConstructor;

  interface LineSymbolProperties extends SymbolProperties {
    /**
     * The width of the symbol in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol.html#width)
     *
     * @default 0.75
     */
    width?: number | string;
  }

  interface LineSymbol3D extends Symbol3D {
    /**
     * For LineSymbol3D the type is always `line-3d`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3D.html#type)
     */
    readonly type: "line-3d";

    /**
     * Creates a deep clone of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3D.html#clone)
     *
     *
     */
    clone(): LineSymbol3D;
  }

  interface LineSymbol3DConstructor {
    new (properties?: LineSymbol3DProperties): LineSymbol3D;

    fromJSON(json: any): LineSymbol3D;
  }

  export const LineSymbol3D: LineSymbol3DConstructor;

  interface LineSymbol3DProperties extends Symbol3DProperties {}

  interface LineSymbol3DLayer extends Symbol3DLayer {
    /**
     * The style used to draw the endpoint of a line. See the table below for possible values.Possible Value | Example---------------|---------butt | ![sls-cap-butt](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/sls-cap-butt.png)round | ![sls-cap-round](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/sls-cap-round.png)square | ![sls-cap-square](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/sls-cap-square.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#cap)
     *
     * @default butt
     */
    cap: "butt" | "round" | "square";
    /**
     * The style used to draw the intersection of two line segments within a line geometry.See the table below for possible values.Possible Value | Example---------------|---------bevel | ![sls-join-bevel](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/sls-join-bevel.png)miter | ![sls-join-miter](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/sls-join-miter.png)round | ![sls-join-round](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/sls-join-round.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#join)
     *
     * @default miter
     */
    join: "miter" | "round" | "bevel";
    /**
     * The material used to shade the line. This property defines the line's color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#material)
     */
    material: LineSymbol3DLayerMaterial;
    /**
     * The width of the line in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#size)
     *
     * @default "1px"
     */
    size: number;
    /**
     * For LineSymbol3DLayer the type is always `line`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#type)
     */
    readonly type: "line";

    /**
     * Creates a deep clone of the symbol layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#clone)
     *
     *
     */
    clone(): LineSymbol3DLayer;
  }

  interface LineSymbol3DLayerConstructor {
    new (properties?: LineSymbol3DLayerProperties): LineSymbol3DLayer;

    fromJSON(json: any): LineSymbol3DLayer;
  }

  export const LineSymbol3DLayer: LineSymbol3DLayerConstructor;

  interface LineSymbol3DLayerProperties extends Symbol3DLayerProperties {
    /**
     * The style used to draw the endpoint of a line. See the table below for possible values.Possible Value | Example---------------|---------butt | ![sls-cap-butt](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/sls-cap-butt.png)round | ![sls-cap-round](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/sls-cap-round.png)square | ![sls-cap-square](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/sls-cap-square.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#cap)
     *
     * @default butt
     */
    cap?: "butt" | "round" | "square";
    /**
     * The style used to draw the intersection of two line segments within a line geometry.See the table below for possible values.Possible Value | Example---------------|---------bevel | ![sls-join-bevel](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/sls-join-bevel.png)miter | ![sls-join-miter](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/sls-join-miter.png)round | ![sls-join-round](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/sls-join-round.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#join)
     *
     * @default miter
     */
    join?: "miter" | "round" | "bevel";
    /**
     * The material used to shade the line. This property defines the line's color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#material)
     */
    material?: LineSymbol3DLayerMaterialProperties;
    /**
     * The width of the line in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#size)
     *
     * @default "1px"
     */
    size?: number | string;
  }

  export interface LineSymbol3DLayerMaterialProperties extends Object {
    /**
     * The color of the line.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#material)
     *
     * @default white
     */
    color?: Color | number[] | string;
  }

  export interface LineSymbol3DLayerMaterial extends AnonymousAccessor {
    /**
     * The color of the line.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#material)
     *
     * @default white
     */
    color?: Color;
  }

  interface MarkerSymbol extends Symbol {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MarkerSymbol.html#angle)
     *
     * @default 0
     */
    angle: number;
    /**
     * The offset on the x-axis in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MarkerSymbol.html#xoffset)
     *
     * @default 0
     */
    xoffset: number;
    /**
     * The offset on the y-axis in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MarkerSymbol.html#yoffset)
     *
     * @default 0
     */
    yoffset: number;
  }

  interface MarkerSymbolConstructor {
    new (properties?: MarkerSymbolProperties): MarkerSymbol;

    fromJSON(json: any): MarkerSymbol;
  }

  export const MarkerSymbol: MarkerSymbolConstructor;

  interface MarkerSymbolProperties extends SymbolProperties {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MarkerSymbol.html#angle)
     *
     * @default 0
     */
    angle?: number;
    /**
     * The offset on the x-axis in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MarkerSymbol.html#xoffset)
     *
     * @default 0
     */
    xoffset?: number | string;
    /**
     * The offset on the y-axis in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MarkerSymbol.html#yoffset)
     *
     * @default 0
     */
    yoffset?: number | string;
  }

  interface MeshSymbol3D extends Symbol3D {
    /**
     * For MeshSymbol3D, the type is always `mesh-3d`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MeshSymbol3D.html#type)
     */
    readonly type: "mesh-3d";

    /**
     * Creates a deep clone of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MeshSymbol3D.html#clone)
     *
     *
     */
    clone(): MeshSymbol3D;
  }

  interface MeshSymbol3DConstructor {
    new (properties?: MeshSymbol3DProperties): MeshSymbol3D;

    fromJSON(json: any): MeshSymbol3D;
  }

  export const MeshSymbol3D: MeshSymbol3DConstructor;

  interface MeshSymbol3DProperties extends Symbol3DProperties {}

  interface ObjectSymbol3DLayer extends Symbol3DLayer {
    /**
     * The positioning of the symbol relative to the geometry. The default behavior (`origin`) depends on the resource:* For `sphere`, `cube` and `diamond` primitives, the origin is at the center.* For `cylinder`, `cone`, `inverted-cone` and `tetrahedron` primitives, the origin is at the bottom.* For `href` resources, the origin coincides with the origin of the 3D model.If `anchor` is set to `relative`, the anchor is defined by [`anchorPosition`](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#anchorPosition) as a fraction ofthe symbol's bounding box.**Possible Values:** center | top | bottom | origin | relative
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#anchor)
     *
     * @default origin
     */
    anchor: string;
    /**
     * Defines the [anchor](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#anchor) relative to the center of the [symbol layer resource](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#resource). It is specified as aratio of the resource's bounding box dimensions.For example, a value of `{ x: 0, y: 0, z: 0 }` designates the center, while a value of `{ x: -0.5, y: -0.5, z: -0.5 }` placesthe symbol at the lower south-west corner of the symbol's bounding box.This property only applies when [anchor](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#anchor) is set to `relative`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#anchorPosition)
     */
    anchorPosition: ObjectSymbol3DLayerAnchorPosition;
    /**
     * Indicates whether the symbol layer geometry casts shadows in the scene.Setting this property to `false` will disable shadows for the symbol layereven if direct shadows are enabled in[SceneView.environment](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#castShadows)
     *
     * @default true
     */
    castShadows: boolean;
    /**
     * The depth, or diameter from north to south, of the object in meters.If `undefined`, the depth will be calculated to maintain the originalproportions of the object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#depth)
     *
     * @default 10
     */
    depth: number;
    /**
     * The clockwise rotation of the symbol in the horizontal plane (i.e., around the z axis).The rotation is specified in degrees and is relative to the y-axis.If the symbol resource is aligned such that its forward facing side points in the direction of the y-axis(the y-axis always points North in WGS84 or WebMercator coordinates), its upwards facing side is pointingin the direction of the z-axis, and its right-hand side points in the direction of the x-axis (the x-axisalways points East in WGS84 or WebMercator coordinates), then this angle corresponds to the heading ofthe symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#heading)
     */
    heading: number;
    /**
     * The height of the object in meters. If `undefined`, the height will becalculated to maintain the original proportions of the object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#height)
     *
     * @default 10
     */
    height: number;
    /**
     * The material used to shade the object. This property defines the object's color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#material)
     */
    material: ObjectSymbol3DLayerMaterial;
    /**
     * The primitive shape (`primitive`) or external 3D model (`href`) used to visualize thepoints. If both properties are present, `primitive` takes precedence and `href` is ignored.When using the `href` property, external 3D models must be present in glTFformat.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#resource)
     *
     * @default { primitive: "sphere" }
     */
    resource: ObjectSymbol3DLayerResource;
    /**
     * The rotation of the symbol in the lateral vertical plane (i.e., around the y axis).The rotation is specified in degrees and is relative to the x-axis. At 0 degrees, the model is level.A positive value lifts the left part and lowers the right part of the model.If the symbol resource is aligned such that its forward facing side points in the direction of the y-axis(the y-axis always points North in WGS84 or WebMercator coordinates), its upwards facing side is pointingin the direction of the z-axis, and its right-hand side points in the direction of the x-axis (the x-axisalways points East in WGS84 or WebMercator coordinates), then this angle corresponds to the roll ofthe symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#roll)
     */
    roll: number;
    /**
     * The rotation of the symbol in the longitudinal vertical plane (i.e., around the x axis).The rotation is specified in degrees and is relative to the y-axis. At 0 degrees, the model is level.A positive value points lifts the front and lowers the back of the model.If the symbol resource is aligned such that its forward facing side points in the direction of the y-axis(the y-axis always points North in WGS84 or WebMercator coordinates), its upwards facing side is pointingin the direction of the z-axis, and its right-hand side points in the direction of the x-axis (the x-axisalways points East in WGS84 or WebMercator coordinates), then this angle corresponds to the tilt ofthe symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#tilt)
     */
    tilt: number;
    /**
     * For ObjectSymbol3DLayer the type is always `object`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#type)
     */
    readonly type: "object";
    /**
     * The width, or diameter from east to west, of the object in meters.If `undefined`, the width will be calculated to maintain the originalproportions of the object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#width)
     *
     * @default 10
     */
    width: number;

    /**
     * Creates a deep clone of the symbol layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#clone)
     *
     *
     */
    clone(): ObjectSymbol3DLayer;
  }

  interface ObjectSymbol3DLayerConstructor {
    new (properties?: ObjectSymbol3DLayerProperties): ObjectSymbol3DLayer;

    fromJSON(json: any): ObjectSymbol3DLayer;
  }

  export const ObjectSymbol3DLayer: ObjectSymbol3DLayerConstructor;

  interface ObjectSymbol3DLayerProperties extends Symbol3DLayerProperties {
    /**
     * The positioning of the symbol relative to the geometry. The default behavior (`origin`) depends on the resource:* For `sphere`, `cube` and `diamond` primitives, the origin is at the center.* For `cylinder`, `cone`, `inverted-cone` and `tetrahedron` primitives, the origin is at the bottom.* For `href` resources, the origin coincides with the origin of the 3D model.If `anchor` is set to `relative`, the anchor is defined by [`anchorPosition`](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#anchorPosition) as a fraction ofthe symbol's bounding box.**Possible Values:** center | top | bottom | origin | relative
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#anchor)
     *
     * @default origin
     */
    anchor?: string;
    /**
     * Defines the [anchor](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#anchor) relative to the center of the [symbol layer resource](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#resource). It is specified as aratio of the resource's bounding box dimensions.For example, a value of `{ x: 0, y: 0, z: 0 }` designates the center, while a value of `{ x: -0.5, y: -0.5, z: -0.5 }` placesthe symbol at the lower south-west corner of the symbol's bounding box.This property only applies when [anchor](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#anchor) is set to `relative`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#anchorPosition)
     */
    anchorPosition?: ObjectSymbol3DLayerAnchorPosition;
    /**
     * Indicates whether the symbol layer geometry casts shadows in the scene.Setting this property to `false` will disable shadows for the symbol layereven if direct shadows are enabled in[SceneView.environment](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#castShadows)
     *
     * @default true
     */
    castShadows?: boolean;
    /**
     * The depth, or diameter from north to south, of the object in meters.If `undefined`, the depth will be calculated to maintain the originalproportions of the object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#depth)
     *
     * @default 10
     */
    depth?: number;
    /**
     * The clockwise rotation of the symbol in the horizontal plane (i.e., around the z axis).The rotation is specified in degrees and is relative to the y-axis.If the symbol resource is aligned such that its forward facing side points in the direction of the y-axis(the y-axis always points North in WGS84 or WebMercator coordinates), its upwards facing side is pointingin the direction of the z-axis, and its right-hand side points in the direction of the x-axis (the x-axisalways points East in WGS84 or WebMercator coordinates), then this angle corresponds to the heading ofthe symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#heading)
     */
    heading?: number;
    /**
     * The height of the object in meters. If `undefined`, the height will becalculated to maintain the original proportions of the object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#height)
     *
     * @default 10
     */
    height?: number;
    /**
     * The material used to shade the object. This property defines the object's color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#material)
     */
    material?: ObjectSymbol3DLayerMaterialProperties;
    /**
     * The primitive shape (`primitive`) or external 3D model (`href`) used to visualize thepoints. If both properties are present, `primitive` takes precedence and `href` is ignored.When using the `href` property, external 3D models must be present in glTFformat.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#resource)
     *
     * @default { primitive: "sphere" }
     */
    resource?: ObjectSymbol3DLayerResource;
    /**
     * The rotation of the symbol in the lateral vertical plane (i.e., around the y axis).The rotation is specified in degrees and is relative to the x-axis. At 0 degrees, the model is level.A positive value lifts the left part and lowers the right part of the model.If the symbol resource is aligned such that its forward facing side points in the direction of the y-axis(the y-axis always points North in WGS84 or WebMercator coordinates), its upwards facing side is pointingin the direction of the z-axis, and its right-hand side points in the direction of the x-axis (the x-axisalways points East in WGS84 or WebMercator coordinates), then this angle corresponds to the roll ofthe symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#roll)
     */
    roll?: number;
    /**
     * The rotation of the symbol in the longitudinal vertical plane (i.e., around the x axis).The rotation is specified in degrees and is relative to the y-axis. At 0 degrees, the model is level.A positive value points lifts the front and lowers the back of the model.If the symbol resource is aligned such that its forward facing side points in the direction of the y-axis(the y-axis always points North in WGS84 or WebMercator coordinates), its upwards facing side is pointingin the direction of the z-axis, and its right-hand side points in the direction of the x-axis (the x-axisalways points East in WGS84 or WebMercator coordinates), then this angle corresponds to the tilt ofthe symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#tilt)
     */
    tilt?: number;
    /**
     * The width, or diameter from east to west, of the object in meters.If `undefined`, the width will be calculated to maintain the originalproportions of the object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#width)
     *
     * @default 10
     */
    width?: number;
  }

  export interface ObjectSymbol3DLayerAnchorPosition extends Object {
    /**
     * Value defining the position relative to the x axis of the bounding box.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#anchorPosition)
     */
    x: number;
    /**
     * Value defining the position relative to the y axis of the bounding box.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#anchorPosition)
     */
    y: number;
    /**
     * Value defining the position relative to the z axis of the bounding box.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#anchorPosition)
     */
    z: number;
  }

  export interface ObjectSymbol3DLayerMaterialProperties extends Object {
    /**
     * The fill color of the object. If the objecthas textures, the textures will be multiplied with the color.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#material)
     *
     * @default white
     */
    color?: Color | number[] | string;
  }

  export interface ObjectSymbol3DLayerMaterial extends AnonymousAccessor {
    /**
     * The fill color of the object. If the objecthas textures, the textures will be multiplied with the color.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#material)
     *
     * @default white
     */
    color?: Color;
  }

  export interface ObjectSymbol3DLayerResource extends Object {
    /**
     * Uses a built-in shape. See the table below for possible values.Value | Description------|------------sphere | ![s3d-object-sphere](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-object-sphere.png)cylinder | ![s3d-object-cylinder](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-object-cylinder.png)cube | ![s3d-object-cube](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-object-cube.png)cone | ![s3d-object-cone](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-object-cone.png)inverted-cone | ![s3d-object-inverted-cone](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-object-inverted-cone.png)diamond | ![s3d-object-diamond](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-object-diamond.png)tetrahedron | ![s3d-object-tetrahedron](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-object-tetrahedron.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#resource)
     */
    primitive?: string;
    /**
     * The URL to the 3D model in glTF format. The URL should point to a glTF file (.gltf or .glb)which can reference additional binary (.bin) and image files (.jpg, .png). See the guide topic on[Visualizing points with 3D symbols](https://developers.arcgis.com/javascript/latest/guide/visualizing-points-3d/index.html) to learn how to use a custom 3D model.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#resource)
     */
    href?: string;
  }

  interface PathSymbol3DLayer extends Symbol3DLayer {
    /**
     * Defines offset of the path cross section relative to the[Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) geometry.Possible Value | Example---------------|---------center | ![anchor-center](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/anchor-center.png)bottom | ![anchor-bottom](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/anchor-bottom.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#anchor)
     *
     * @default "center"
     */
    anchor: "center" | "bottom";
    /**
     * Controls the shape at the start and end point of the path. See the table below for possible values.Possible Value | Example---------------|---------butt | ![line3d-cap-butt](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/line3d-cap-butt.png)round | ![line3d-cap-round](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/line3d-cap-round.png)square | ![line3d-cap-square](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/line3d-cap-square.png)none | ![line3d-cap-square](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/line3d-cap-none.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#cap)
     *
     * @default "butt"
     */
    cap: "none" | "butt" | "square" | "round";
    /**
     * Indicates whether the symbol layer geometry casts shadows in the scene.Setting this property to `false` will disable shadows for the symbol layereven if direct shadows are enabled in[SceneView.environment](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#castShadows)
     *
     * @default true
     */
    castShadows: boolean;
    /**
     * The vertical dimension of the cross-section of the path in meters.If only the [width](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#width) is set, then the height is set to thesame value as the width.If neither width nor height are set, then the path is not displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#height)
     */
    height: number;
    /**
     * Controls the shape of the connection between two segments of the path.See the table below for possible values.Possible Value | Example---------------|---------bevel | ![line3d-join-bevel](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/line3d-join-bevel.png)miter | ![line3d-join-miter](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/line3d-join-miter.png)round | ![line3d-join-round](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/line3d-join-round.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#join)
     *
     * @default "miter"
     */
    join: "miter" | "bevel" | "round";
    /**
     * The material used to shade the path. This property defines the paths's color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#material)
     */
    material: PathSymbol3DLayerMaterial;
    /**
     * Cross-section profile of the path geometry. Setting it to `circle` creates apath with a pipe shape and setting it to `quad` gives the path a rectangular shape.**Possible values:** circle | quad
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#profile)
     *
     * @default "circle"
     */
    profile: "circle" | "quad";
    /**
     * Defines how the [profile](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#profile) is rotated as it is extruded alongthe [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) geometry.The rotation axes (heading, tilt, roll) can belimited to constrain the orientation of the profile in the scene.Setting `profileOrientation` to `all` minimizesthe twist along the line and ensures that the diameter of the resultingvisualization corresponds to [width](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#width) and [height](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#height).Setting `profileOrientation` to `"heading"` ensures that the profilestays upright (no tilt or twist).Typically, `all` is used for `circle` profiles and `heading`is used for `quad` profiles.As an example, when setting `heading` on a path with a `quad` profilethe path is oriented upright:![profileRotation-heading](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/profileRotation-heading.png)The same path with `profileRotation` set to `all` will rotate in allthree degrees of freedom:![profileRotation-all](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/profileRotation-all.png)**Possible values:** heading | all
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#profileRotation)
     *
     * @default "all"
     */
    profileRotation: "heading" | "all";
    /**
     * Sets the width and height of the path in meters. Since this property is deprecateduse [width](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#width) or [height](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#height) instead.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#size)
     */
    size: number;
    /**
     * For PathSymbol3DLayer, the type is always `path`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#type)
     */
    readonly type: "path";
    /**
     * The horizontal dimension of the cross-section of the path in meters.If only the [height](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#height) is set, then the width is set tothe same value as the height.If neither width nor height are set, then the path is not displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#width)
     */
    width: number;

    /**
     * Creates a deep clone of the symbol layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#clone)
     *
     *
     */
    clone(): PathSymbol3DLayer;
  }

  interface PathSymbol3DLayerConstructor {
    new (properties?: PathSymbol3DLayerProperties): PathSymbol3DLayer;

    fromJSON(json: any): PathSymbol3DLayer;
  }

  export const PathSymbol3DLayer: PathSymbol3DLayerConstructor;

  interface PathSymbol3DLayerProperties extends Symbol3DLayerProperties {
    /**
     * Defines offset of the path cross section relative to the[Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) geometry.Possible Value | Example---------------|---------center | ![anchor-center](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/anchor-center.png)bottom | ![anchor-bottom](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/anchor-bottom.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#anchor)
     *
     * @default "center"
     */
    anchor?: "center" | "bottom";
    /**
     * Controls the shape at the start and end point of the path. See the table below for possible values.Possible Value | Example---------------|---------butt | ![line3d-cap-butt](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/line3d-cap-butt.png)round | ![line3d-cap-round](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/line3d-cap-round.png)square | ![line3d-cap-square](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/line3d-cap-square.png)none | ![line3d-cap-square](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/line3d-cap-none.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#cap)
     *
     * @default "butt"
     */
    cap?: "none" | "butt" | "square" | "round";
    /**
     * Indicates whether the symbol layer geometry casts shadows in the scene.Setting this property to `false` will disable shadows for the symbol layereven if direct shadows are enabled in[SceneView.environment](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#castShadows)
     *
     * @default true
     */
    castShadows?: boolean;
    /**
     * The vertical dimension of the cross-section of the path in meters.If only the [width](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#width) is set, then the height is set to thesame value as the width.If neither width nor height are set, then the path is not displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#height)
     */
    height?: number;
    /**
     * Controls the shape of the connection between two segments of the path.See the table below for possible values.Possible Value | Example---------------|---------bevel | ![line3d-join-bevel](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/line3d-join-bevel.png)miter | ![line3d-join-miter](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/line3d-join-miter.png)round | ![line3d-join-round](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/line3d-join-round.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#join)
     *
     * @default "miter"
     */
    join?: "miter" | "bevel" | "round";
    /**
     * The material used to shade the path. This property defines the paths's color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#material)
     */
    material?: PathSymbol3DLayerMaterialProperties;
    /**
     * Cross-section profile of the path geometry. Setting it to `circle` creates apath with a pipe shape and setting it to `quad` gives the path a rectangular shape.**Possible values:** circle | quad
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#profile)
     *
     * @default "circle"
     */
    profile?: "circle" | "quad";
    /**
     * Defines how the [profile](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#profile) is rotated as it is extruded alongthe [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) geometry.The rotation axes (heading, tilt, roll) can belimited to constrain the orientation of the profile in the scene.Setting `profileOrientation` to `all` minimizesthe twist along the line and ensures that the diameter of the resultingvisualization corresponds to [width](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#width) and [height](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#height).Setting `profileOrientation` to `"heading"` ensures that the profilestays upright (no tilt or twist).Typically, `all` is used for `circle` profiles and `heading`is used for `quad` profiles.As an example, when setting `heading` on a path with a `quad` profilethe path is oriented upright:![profileRotation-heading](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/profileRotation-heading.png)The same path with `profileRotation` set to `all` will rotate in allthree degrees of freedom:![profileRotation-all](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/profileRotation-all.png)**Possible values:** heading | all
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#profileRotation)
     *
     * @default "all"
     */
    profileRotation?: "heading" | "all";
    /**
     * Sets the width and height of the path in meters. Since this property is deprecateduse [width](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#width) or [height](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#height) instead.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#size)
     */
    size?: number;
    /**
     * The horizontal dimension of the cross-section of the path in meters.If only the [height](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#height) is set, then the width is set tothe same value as the height.If neither width nor height are set, then the path is not displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#width)
     */
    width?: number;
  }

  export interface PathSymbol3DLayerMaterialProperties extends Object {
    /**
     * The color of the path.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#material)
     *
     * @default white
     */
    color?: Color | number[] | string;
  }

  export interface PathSymbol3DLayerMaterial extends AnonymousAccessor {
    /**
     * The color of the path.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#material)
     *
     * @default white
     */
    color?: Color;
  }

  interface PictureFillSymbol extends FillSymbol {
    /**
     * The height of the image in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#height)
     *
     * @default 12
     */
    height: number;
    /**
     * For PictureFillSymbol the type is always `picture-fill`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#type)
     */
    readonly type: "picture-fill";
    /**
     * The URL to the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#url)
     */
    url: string;
    /**
     * The width of the image in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#width)
     *
     * @default 12
     */
    width: number;
    /**
     * The offset on the x-axis in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#xoffset)
     *
     * @default 0
     */
    xoffset: number;
    /**
     * The scale factor on the x axis of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#xscale)
     *
     * @default 1
     */
    xscale: number;
    /**
     * The offset on the y-axis in pixels or points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#yoffset)
     *
     * @default 0
     */
    yoffset: number;
    /**
     * The scale factor on the y axis of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#yscale)
     *
     * @default 1
     */
    yscale: number;

    /**
     * Creates a deep clone of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#clone)
     *
     *
     */
    clone(): PictureFillSymbol;
  }

  interface PictureFillSymbolConstructor {
    new (properties?: PictureFillSymbolProperties): PictureFillSymbol;

    fromJSON(json: any): PictureFillSymbol;
  }

  export const PictureFillSymbol: PictureFillSymbolConstructor;

  interface PictureFillSymbolProperties extends FillSymbolProperties {
    /**
     * The height of the image in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#height)
     *
     * @default 12
     */
    height?: number | string;
    /**
     * The URL to the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#url)
     */
    url?: string;
    /**
     * The width of the image in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#width)
     *
     * @default 12
     */
    width?: number | string;
    /**
     * The offset on the x-axis in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#xoffset)
     *
     * @default 0
     */
    xoffset?: number | string;
    /**
     * The scale factor on the x axis of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#xscale)
     *
     * @default 1
     */
    xscale?: number;
    /**
     * The offset on the y-axis in pixels or points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#yoffset)
     *
     * @default 0
     */
    yoffset?: number | string;
    /**
     * The scale factor on the y axis of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#yscale)
     *
     * @default 1
     */
    yscale?: number;
  }

  interface PictureMarkerSymbol extends MarkerSymbol {
    /**
     * The height of the image in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).The maximum allowed height of a picture marker symbol is 200px. If youset any value higher than 200px, then the image will be scaled down toa height of 200px while preserving the aspect ratio of the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureMarkerSymbol.html#height)
     *
     * @default 12
     */
    height: number;
    /**
     * For PictureMarkerSymbol the type is always `picture-marker`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureMarkerSymbol.html#type)
     */
    readonly type: "picture-marker";
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureMarkerSymbol.html#url)
     */
    url: string;
    /**
     * The width of the image in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).The maximum allowed width of a picture marker symbol is 200px. If youset any value higher than 200px, then the image will be scaled down toa width of 200px while preserving the aspect ratio of the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureMarkerSymbol.html#width)
     *
     * @default 12
     */
    width: number;

    /**
     * Creates a deep clone of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureMarkerSymbol.html#clone)
     *
     *
     */
    clone(): PictureMarkerSymbol;
  }

  interface PictureMarkerSymbolConstructor {
    new (properties?: PictureMarkerSymbolProperties): PictureMarkerSymbol;

    fromJSON(json: any): PictureMarkerSymbol;
  }

  export const PictureMarkerSymbol: PictureMarkerSymbolConstructor;

  interface PictureMarkerSymbolProperties extends MarkerSymbolProperties {
    /**
     * The height of the image in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).The maximum allowed height of a picture marker symbol is 200px. If youset any value higher than 200px, then the image will be scaled down toa height of 200px while preserving the aspect ratio of the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureMarkerSymbol.html#height)
     *
     * @default 12
     */
    height?: number | string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureMarkerSymbol.html#url)
     */
    url?: string;
    /**
     * The width of the image in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).The maximum allowed width of a picture marker symbol is 200px. If youset any value higher than 200px, then the image will be scaled down toa width of 200px while preserving the aspect ratio of the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureMarkerSymbol.html#width)
     *
     * @default 12
     */
    width?: number | string;
  }

  interface PointSymbol3D extends Symbol3D {
    /**
     * Settings for adding a callout visualization to the symbol. Callouts are drawn from the point feature location that is being symbolized,to the vertical offset of the symbol. This property has no effect if [verticalOffset](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#verticalOffset) is not set. At the moment only callouts of type line aresupported. See [LineCallout3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#callout)
     */
    callout: LineCallout3D;
    /**
     * For PointSymbol3D the type is always `point-3d`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#type)
     */
    readonly type: "point-3d";
    /**
     * Shifts the symbol along the vertical world axis by a given height. The height is set in screen space units like points or pixels.For points displayed with a [callout](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#callout) `verticalOffset` should be set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#verticalOffset)
     */
    verticalOffset: PointSymbol3DVerticalOffset;

    /**
     * Creates a deep clone of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#clone)
     *
     *
     */
    clone(): PointSymbol3D;
  }

  interface PointSymbol3DConstructor {
    new (properties?: PointSymbol3DProperties): PointSymbol3D;

    fromJSON(json: any): PointSymbol3D;
  }

  export const PointSymbol3D: PointSymbol3DConstructor;

  interface PointSymbol3DProperties extends Symbol3DProperties {
    /**
     * Settings for adding a callout visualization to the symbol. Callouts are drawn from the point feature location that is being symbolized,to the vertical offset of the symbol. This property has no effect if [verticalOffset](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#verticalOffset) is not set. At the moment only callouts of type line aresupported. See [LineCallout3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#callout)
     */
    callout?: LineCallout3DProperties;
    /**
     * Shifts the symbol along the vertical world axis by a given height. The height is set in screen space units like points or pixels.For points displayed with a [callout](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#callout) `verticalOffset` should be set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#verticalOffset)
     */
    verticalOffset?: PointSymbol3DVerticalOffsetProperties;
  }

  export interface PointSymbol3DVerticalOffsetProperties extends Object {
    /**
     * The vertical symbol offset in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#verticalOffset)
     */
    screenLength?: number;
    /**
     * The minimum vertical symbol offset in world units. It acts as a lower bound to avoid vertical offset becoming too small.In the following animation the green symbol on the left has `minWorldLength = 20` and for the orange symbol on the right `minWorldLength` has not been set:![minWorldLength-on](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3D-line-callout-minWorldLength.gif)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#verticalOffset)
     */
    minWorldLength?: number;
    /**
     * The maximum vertical symbol offset in world units. It acts as an upper bound to avoid vertical offset becoming too big.In the following animation the green symbols have `maxWorldLength = 50` and orange symbols don't have `maxWorldLength` set:![maxWorldLength](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3D-line-callout-maxWorldLength.gif)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#verticalOffset)
     */
    maxWorldLength?: number;
  }

  export interface PointSymbol3DVerticalOffset extends AnonymousAccessor {
    /**
     * The vertical symbol offset in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#verticalOffset)
     */
    screenLength: number;
    /**
     * The minimum vertical symbol offset in world units. It acts as a lower bound to avoid vertical offset becoming too small.In the following animation the green symbol on the left has `minWorldLength = 20` and for the orange symbol on the right `minWorldLength` has not been set:![minWorldLength-on](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3D-line-callout-minWorldLength.gif)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#verticalOffset)
     */
    minWorldLength?: number;
    /**
     * The maximum vertical symbol offset in world units. It acts as an upper bound to avoid vertical offset becoming too big.In the following animation the green symbols have `maxWorldLength = 50` and orange symbols don't have `maxWorldLength` set:![maxWorldLength](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3D-line-callout-maxWorldLength.gif)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#verticalOffset)
     */
    maxWorldLength?: number;
  }

  interface PolygonSymbol3D extends Symbol3D {
    /**
     * For PolygonSymbol3D the type is always `polygon-3d`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PolygonSymbol3D.html#type)
     */
    readonly type: "polygon-3d";

    /**
     * Creates a deep clone of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PolygonSymbol3D.html#clone)
     *
     *
     */
    clone(): PolygonSymbol3D;
  }

  interface PolygonSymbol3DConstructor {
    new (properties?: PolygonSymbol3DProperties): PolygonSymbol3D;

    fromJSON(json: any): PolygonSymbol3D;
  }

  export const PolygonSymbol3D: PolygonSymbol3DConstructor;

  interface PolygonSymbol3DProperties extends Symbol3DProperties {}

  interface SimpleFillSymbol extends FillSymbol {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html#style)
     *
     * @default solid
     */
    style: string;
    /**
     * For SimpleFillSymbol the type is always `simple-fill`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html#type)
     */
    readonly type: "simple-fill";

    /**
     * Creates a deep clone of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html#clone)
     *
     *
     */
    clone(): SimpleFillSymbol;
  }

  interface SimpleFillSymbolConstructor {
    new (properties?: SimpleFillSymbolProperties): SimpleFillSymbol;

    fromJSON(json: any): SimpleFillSymbol;
  }

  export const SimpleFillSymbol: SimpleFillSymbolConstructor;

  interface SimpleFillSymbolProperties extends FillSymbolProperties {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html#style)
     *
     * @default solid
     */
    style?: string;
  }

  interface SimpleLineSymbol extends LineSymbol {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#cap)
     *
     * @default round
     */
    cap: "butt" | "round" | "square";
    /**
     * Specifies the join style. A `join` refers to the joint of a polyline, or the end of a line segment that connects to another segment of the same polyline.See the table below for possible values.Possible Value | Example---------------|---------bevel | ![sls-join-bevel](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/sls-join-bevel.png)miter | ![sls-join-miter](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/sls-join-miter.png)round | ![sls-join-round](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/sls-join-round.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#join)
     *
     * @default round
     */
    join: "miter" | "round" | "bevel";
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#miterLimit)
     *
     * @default 2
     */
    miterLimit: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#style)
     *
     * @default solid
     */
    style: string;
    /**
     * For SimpleLineSymbol, the type is always `simple-line`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#type)
     */
    readonly type: "simple-line";

    /**
     * Creates a deep clone of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#clone)
     *
     *
     */
    clone(): SimpleLineSymbol;
  }

  interface SimpleLineSymbolConstructor {
    new (properties?: SimpleLineSymbolProperties): SimpleLineSymbol;

    fromJSON(json: any): SimpleLineSymbol;
  }

  export const SimpleLineSymbol: SimpleLineSymbolConstructor;

  interface SimpleLineSymbolProperties extends LineSymbolProperties {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#cap)
     *
     * @default round
     */
    cap?: "butt" | "round" | "square";
    /**
     * Specifies the join style. A `join` refers to the joint of a polyline, or the end of a line segment that connects to another segment of the same polyline.See the table below for possible values.Possible Value | Example---------------|---------bevel | ![sls-join-bevel](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/sls-join-bevel.png)miter | ![sls-join-miter](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/sls-join-miter.png)round | ![sls-join-round](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/sls-join-round.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#join)
     *
     * @default round
     */
    join?: "miter" | "round" | "bevel";
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#miterLimit)
     *
     * @default 2
     */
    miterLimit?: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#style)
     *
     * @default solid
     */
    style?: string;
  }

  interface SimpleMarkerSymbol extends MarkerSymbol {
    /**
     * The outline of the marker symbol. The `color` property of this objectdirectly modifies the overall color of marker symbols defined with the `cross` or `x`[style](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#style).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#outline)
     */
    outline: SimpleLineSymbol;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#path)
     */
    path: string;
    /**
     * The size of the marker in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#size)
     *
     * @default 12
     */
    size: number;
    /**
     * The marker style. Possible values are in the table below.Value | Description------|------------circle | ![sms_circle](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols-sms-circle.png)cross | ![sms_cross](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols-sms-cross.png)diamond | ![sms_diamond](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols-sms-diamond.png)square | ![sms_square](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols-sms-square.png)triangle | ![sms_triangle](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols-sms-triangle.png)x | ![sms_x](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols-sms-x.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#style)
     *
     * @default circle
     */
    style: string;
    /**
     * For SimpleMarkerSymbol the type is always `simple-marker`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#type)
     */
    readonly type: "simple-marker";

    /**
     * Creates a deep clone of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#clone)
     *
     *
     */
    clone(): SimpleMarkerSymbol;
  }

  interface SimpleMarkerSymbolConstructor {
    new (properties?: SimpleMarkerSymbolProperties): SimpleMarkerSymbol;

    fromJSON(json: any): SimpleMarkerSymbol;
  }

  export const SimpleMarkerSymbol: SimpleMarkerSymbolConstructor;

  interface SimpleMarkerSymbolProperties extends MarkerSymbolProperties {
    /**
     * The outline of the marker symbol. The `color` property of this objectdirectly modifies the overall color of marker symbols defined with the `cross` or `x`[style](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#style).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#outline)
     */
    outline?: SimpleLineSymbolProperties;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#path)
     */
    path?: string;
    /**
     * The size of the marker in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#size)
     *
     * @default 12
     */
    size?: number | string;
    /**
     * The marker style. Possible values are in the table below.Value | Description------|------------circle | ![sms_circle](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols-sms-circle.png)cross | ![sms_cross](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols-sms-cross.png)diamond | ![sms_diamond](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols-sms-diamond.png)square | ![sms_square](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols-sms-square.png)triangle | ![sms_triangle](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols-sms-triangle.png)x | ![sms_x](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols-sms-x.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#style)
     *
     * @default circle
     */
    style?: string;
  }

  interface symbolsSupportJsonUtils {
    /**
     * Creates a new instance of an appropriate [Symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol.html) class and initializes it with values from a JSON objectgenerated from a product in the ArcGIS platform. The object passed into the input `json`parameter often comes from a response to a query operation in the REST API or a[toJSON()](http://pro.arcgis.com/en/pro-app/tool-reference/conversion/features-to-json.htm)method from another ArcGIS product. See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html)topic in the Guide for details and examples of when and how to use this function.When you create a [MarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MarkerSymbol.html), [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html) or[PictureMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureMarkerSymbol.html) from a JSON object, you may specify a property angle to rotate the symbol.Be aware that the angle in the JSON is different from [MarkerSymbol.angle](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MarkerSymbol.html#angle).The angle in the JSON follows the traditional ArcGIS specification and is rotated counter-clockwise, whereas the angle in thesymbol is rotated clockwise.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-jsonUtils.html#fromJSON)
     *
     * @param json A JSON representation of the instance in the ArcGIS format. See                     the [ArcGIS REST API documentation](https://developers.arcgis.com/documentation/common-data-types/symbol-objects.htm)                     for examples of the structure of various input JSON objects.
     *
     */
    fromJSON(json: any): Symbol;
  }

  export const symbolsSupportJsonUtils: symbolsSupportJsonUtils;

  interface symbolPreview {
    /**
     * Generates a preview image of a given symbol that can be displayed ina custom widget or other DOM element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolPreview.html#renderPreviewHTML)
     *
     * @param symbol The symbol for which to generate a preview image.
     * @param options Formatting options for the symbol preview image.
     * @param options.node The parent node to append to the symbol.
     * @param options.size The size of the symbol preview in points.
     * @param options.maxSize The maximum size of the symbol preview in points.
     * @param options.opacity The opacity of the layer represented by the `symbol`.
     * @param options.scale Indicates whether to scale the symbol preview.
     * @param options.disableUpsampling Indicates whether to disable upsampling for raster images.
     * @param options.symbolConfig For "tall" symbols in portrait view, then the `tall` value should be used here.
     *
     */
    renderPreviewHTML(symbol: Symbol, options?: symbolPreviewRenderPreviewHTMLOptions): IPromise<HTMLElement>;
  }

  export const symbolPreview: symbolPreview;

  export interface symbolPreviewRenderPreviewHTMLOptions extends Object {
    /**
     * The parent node to append to the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolPreview.html#renderPreviewHTML)
     */
    node?: HTMLElement;
    /**
     * The size of the symbol preview in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolPreview.html#renderPreviewHTML)
     */
    size?: number;
    /**
     * The maximum size of the symbol preview in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolPreview.html#renderPreviewHTML)
     */
    maxSize?: number;
    /**
     * The opacity of the layer represented by the `symbol`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolPreview.html#renderPreviewHTML)
     */
    opacity?: number;
    /**
     * Indicates whether to scale the symbol preview.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolPreview.html#renderPreviewHTML)
     */
    scale?: boolean;
    /**
     * Indicates whether to disable upsampling for raster images.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolPreview.html#renderPreviewHTML)
     */
    disableUpsampling?: boolean;
    /**
     * For "tall" symbols in portrait view, then the `tall` value should be used here.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolPreview.html#renderPreviewHTML)
     */
    symbolConfig?: string;
  }

  interface symbolUtils {
    /**
     * Returns a symbol representing the input [Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html). This method is useful when you need to know the exact visual propertiesof a [Graphic's symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#symbol), particularly when the graphic comes from the result of a[hitTest()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#hitTest) and its symbol properties may be empty. A symbol's properties won't be populated when a[Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html) defines the visualization of a layer rather than symbols set individually on each graphic of a layer.This is the case for [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html), and any other layer that has a `renderer` property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#getDisplayedSymbol)
     *
     * @param graphic The graphic from which to retrieve the displayed symbol. This commonly comes  from a [hitTest()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#hitTest) operation.
     * @param options Options for generating the display symbol of the input graphic. These must be specified if the input  graphic comes from a layer with a renderer that has [visual variables](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-SimpleRenderer.html#visualVariables)  applied. See the object specification below.
     * @param options.scale The [view scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale) at which the symbol is displayed.
     * @param options.viewingMode The [viewingMode](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewingMode) of the view, if the symbol  is displayed in a SceneView.
     * @param options.spatialReference The spatial reference of the view in which the symbol  is displayed.
     * @param options.resolution The [resolution](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#resolution) of the view at which  the symbol is displayed.
     *
     */
    getDisplayedSymbol(graphic: Graphic, options?: symbolUtilsGetDisplayedSymbolOptions): IPromise<Symbol>;
    /**
     * Generates a preview image of a given symbol that can be displayed ina custom widget or other DOM element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#renderPreviewHTML)
     *
     * @param symbol The symbol for which to generate a preview image.
     * @param options Formatting options for the symbol preview image.
     * @param options.node The parent node to append to the symbol.
     * @param options.size The size of the symbol preview in points.
     * @param options.maxSize The maximum size of the symbol preview in points.
     * @param options.opacity The opacity of the layer represented by the `symbol`.
     * @param options.scale Indicates whether to scale the symbol preview.
     * @param options.disableUpsampling Indicates whether to disable upsampling for raster images.
     * @param options.symbolConfig For "tall" symbols in portrait view, then the `tall` value should be used here.
     * @param options.rotation The rotation of the symbol.
     *
     */
    renderPreviewHTML(symbol: Symbol, options?: symbolUtilsRenderPreviewHTMLOptions): IPromise<HTMLElement>;
  }

  export const symbolUtils: symbolUtils;

  export interface symbolUtilsGetDisplayedSymbolOptions extends Object {
    /**
     * The [view scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale) at which the symbol is displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#getDisplayedSymbol)
     */
    scale?: number;
    /**
     * The [viewingMode](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewingMode) of the view, if the symbol  is displayed in a SceneView.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#getDisplayedSymbol)
     */
    viewingMode?: string;
    /**
     * The spatial reference of the view in which the symbol  is displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#getDisplayedSymbol)
     */
    spatialReference?: SpatialReference;
    /**
     * The [resolution](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#resolution) of the view at which  the symbol is displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#getDisplayedSymbol)
     */
    resolution?: number;
  }

  export interface symbolUtilsRenderPreviewHTMLOptions extends Object {
    /**
     * The parent node to append to the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#renderPreviewHTML)
     */
    node?: HTMLElement;
    /**
     * The size of the symbol preview in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#renderPreviewHTML)
     */
    size?: number;
    /**
     * The maximum size of the symbol preview in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#renderPreviewHTML)
     */
    maxSize?: number;
    /**
     * The opacity of the layer represented by the `symbol`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#renderPreviewHTML)
     */
    opacity?: number;
    /**
     * Indicates whether to scale the symbol preview.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#renderPreviewHTML)
     */
    scale?: boolean;
    /**
     * Indicates whether to disable upsampling for raster images.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#renderPreviewHTML)
     */
    disableUpsampling?: boolean;
    /**
     * For "tall" symbols in portrait view, then the `tall` value should be used here.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#renderPreviewHTML)
     */
    symbolConfig?: string;
    /**
     * The rotation of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#renderPreviewHTML)
     */
    rotation?: string;
  }

  interface Symbol extends Accessor, JSONSupport {
    /**
     * The color of the symbol.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol.html#color)
     *
     * @default black
     */
    color: Color;
    /**
     * The symbol type.**Possible values:** simple-marker | picture-marker | simple-line |cartographic-line-symbol |  simple-fill | picture-fill | text |shield-label-symbol | point-3d | line-3d | polygon-3d | mesh-3d | label-3d
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol.html#type)
     */
    readonly type: string;
  }

  interface SymbolConstructor {
    new (properties?: SymbolProperties): Symbol;

    fromJSON(json: any): Symbol;
  }

  export const Symbol: SymbolConstructor;

  interface SymbolProperties {
    /**
     * The color of the symbol.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol.html#color)
     *
     * @default black
     */
    color?: Color | number[] | string;
  }

  interface Symbol3D extends Symbol {
    /**
     * The origin of the style from which the symbol was originally referenced.A reference to the style origin can be either by styleName or by styleUrl(but not both). This information is part of the WebScene persistence modeland may be used to understand where a symbol was originally sourced from.It does not affect actual appearance or rendering of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3D.html#styleOrigin)
     */
    styleOrigin: Symbol3DStyleOrigin;
    /**
     * A Collection of [Symbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3DLayer.html) objectsused to visualize the graphic or feature. Individual symbol layersmay be autocast as objects and specified using the `type` property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3D.html#symbolLayers)
     */
    symbolLayers: Collection<Symbol3DLayer>;
  }

  interface Symbol3DConstructor {
    new (properties?: Symbol3DProperties): Symbol3D;

    fromJSON(json: any): Symbol3D;
  }

  export const Symbol3D: Symbol3DConstructor;

  interface Symbol3DProperties extends SymbolProperties {
    /**
     * The origin of the style from which the symbol was originally referenced.A reference to the style origin can be either by styleName or by styleUrl(but not both). This information is part of the WebScene persistence modeland may be used to understand where a symbol was originally sourced from.It does not affect actual appearance or rendering of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3D.html#styleOrigin)
     */
    styleOrigin?: Symbol3DStyleOrigin;
    /**
     * A Collection of [Symbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3DLayer.html) objectsused to visualize the graphic or feature. Individual symbol layersmay be autocast as objects and specified using the `type` property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3D.html#symbolLayers)
     */
    symbolLayers?: CollectionProperties<Symbol3DLayerProperties>;
  }

  export interface Symbol3DStyleOrigin extends Object {
    /**
     * a well-known esri-provided style, such as `EsriThematicShapesStyle`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3D.html#styleOrigin)
     */
    styleName?: string;
    /**
     * url to a style definition
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3D.html#styleOrigin)
     */
    styleUrl?: string;
    /**
     * name of the symbol in the style referenced by styleName or styleUrl
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3D.html#styleOrigin)
     */
    name: string;
  }

  interface Symbol3DLayer extends Accessor, JSONSupport {
    /**
     * The 3D symbol layer type. See the table below for a list of possible values.Value | Description------|------------icon | ![s3d-icon](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-icon-circle.png)object | ![s3d-object](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-object-sphere.png)line | ![s3d-line](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-line-line.png)path | ![s3d-path](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-path-tube.png)fill | ![s3d-fill](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-fill-solid.png)water | ![s3d-water](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-water-solid.png)extrusion | ![s3d-extrusion](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-extrude-solid.png)text | ![s3d-text](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbols3d-label-text.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3DLayer.html#type)
     */
    readonly type: string;
  }

  interface Symbol3DLayerConstructor {
    new (properties?: Symbol3DLayerProperties): Symbol3DLayer;

    fromJSON(json: any): Symbol3DLayer;
  }

  export const Symbol3DLayer: Symbol3DLayerConstructor;

  interface Symbol3DLayerProperties {}

  interface TextSymbol extends Symbol {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#angle)
     *
     * @default 0
     */
    angle: number;
    /**
     * The background color of the label's bounding box. This property is only supported for[MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#backgroundColor)
     */
    backgroundColor: Color;
    /**
     * The border color of the label's bounding box. This property is only supported for[MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#borderLineColor)
     */
    borderLineColor: Color;
    /**
     * The border size or width of the label's bounding box. This property is only supported for[MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#borderLineSize)
     */
    borderLineSize: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#font)
     */
    font: Font;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#haloColor)
     */
    haloColor: Color;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#haloSize)
     */
    haloSize: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#horizontalAlignment)
     *
     * @default center
     */
    horizontalAlignment: string;
    /**
     * Determines whether to adjust the spacing between characters in the text string.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#kerning)
     *
     * @default true
     */
    kerning: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#rotated)
     *
     * @default false
     */
    rotated: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#text)
     */
    text: string;
    /**
     * For TextSymbol, the type is always `text`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#type)
     */
    readonly type: "text";
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#verticalAlignment)
     *
     * @default baseline
     */
    verticalAlignment: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#xoffset)
     *
     * @default 0
     */
    xoffset: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#yoffset)
     *
     * @default 0
     */
    yoffset: number;

    /**
     * Creates a deep clone of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#clone)
     *
     *
     */
    clone(): TextSymbol;
  }

  interface TextSymbolConstructor {
    new (properties?: TextSymbolProperties): TextSymbol;

    fromJSON(json: any): TextSymbol;
  }

  export const TextSymbol: TextSymbolConstructor;

  interface TextSymbolProperties extends SymbolProperties {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#angle)
     *
     * @default 0
     */
    angle?: number;
    /**
     * The background color of the label's bounding box. This property is only supported for[MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#backgroundColor)
     */
    backgroundColor?: Color | number[] | string;
    /**
     * The border color of the label's bounding box. This property is only supported for[MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#borderLineColor)
     */
    borderLineColor?: Color | number[] | string;
    /**
     * The border size or width of the label's bounding box. This property is only supported for[MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#borderLineSize)
     */
    borderLineSize?: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#font)
     */
    font?: FontProperties;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#haloColor)
     */
    haloColor?: Color | number[] | string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#haloSize)
     */
    haloSize?: number | string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#horizontalAlignment)
     *
     * @default center
     */
    horizontalAlignment?: string;
    /**
     * Determines whether to adjust the spacing between characters in the text string.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#kerning)
     *
     * @default true
     */
    kerning?: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#rotated)
     *
     * @default false
     */
    rotated?: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#text)
     */
    text?: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#verticalAlignment)
     *
     * @default baseline
     */
    verticalAlignment?: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#xoffset)
     *
     * @default 0
     */
    xoffset?: number | string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#yoffset)
     *
     * @default 0
     */
    yoffset?: number | string;
  }

  interface TextSymbol3DLayer extends Symbol3DLayer {
    /**
     * The font of the text label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#font)
     */
    font: Font;
    /**
     * The halo surrounding the text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#halo)
     */
    halo: TextSymbol3DLayerHalo;
    /**
     * The material used to color the text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#material)
     */
    material: TextSymbol3DLayerMaterial;
    /**
     * Size of the text label in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`). When set, this propertyoverrides the [font.size](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#size) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#size)
     *
     * @default 9
     */
    size: number;
    /**
     * The text to be displayed. To manually create a new line, use the `\n` escape character.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#text)
     */
    text: string;
    /**
     * For TextSymbol3DLayer the type is always `text`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#type)
     */
    readonly type: "text";

    /**
     * Creates a deep clone of the symbol layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#clone)
     *
     *
     */
    clone(): TextSymbol3DLayer;
  }

  interface TextSymbol3DLayerConstructor {
    new (properties?: TextSymbol3DLayerProperties): TextSymbol3DLayer;

    fromJSON(json: any): TextSymbol3DLayer;
  }

  export const TextSymbol3DLayer: TextSymbol3DLayerConstructor;

  interface TextSymbol3DLayerProperties extends Symbol3DLayerProperties {
    /**
     * The font of the text label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#font)
     */
    font?: FontProperties;
    /**
     * The halo surrounding the text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#halo)
     */
    halo?: TextSymbol3DLayerHaloProperties;
    /**
     * The material used to color the text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#material)
     */
    material?: TextSymbol3DLayerMaterialProperties;
    /**
     * Size of the text label in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`). When set, this propertyoverrides the [font.size](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#size) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#size)
     *
     * @default 9
     */
    size?: number | string;
    /**
     * The text to be displayed. To manually create a new line, use the `\n` escape character.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#text)
     */
    text?: string;
  }

  export interface TextSymbol3DLayerHaloProperties extends Object {
    /**
     * The color of the halo.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#halo)
     *
     * @default black
     */
    color?: Color | number[] | string;
    /**
     * The size of the halo in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#halo)
     *
     * @default 0
     */
    size?: number | string;
  }

  export interface TextSymbol3DLayerHalo extends AnonymousAccessor {
    /**
     * The color of the halo.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#halo)
     *
     * @default black
     */
    color?: Color;
    /**
     * The size of the halo in points. This value may be autocast with a stringexpressing size in points or pixels (e.g. `12px`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#halo)
     *
     * @default 0
     */
    size?: number;
  }

  export interface TextSymbol3DLayerMaterialProperties extends Object {
    /**
     * The color of the text.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#material)
     *
     * @default white
     */
    color?: Color | number[] | string;
  }

  export interface TextSymbol3DLayerMaterial extends AnonymousAccessor {
    /**
     * The color of the text.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#material)
     *
     * @default white
     */
    color?: Color;
  }

  interface WaterSymbol3DLayer extends Symbol3DLayer {
    /**
     * The dominant color used to shade the water. The water has different shades of the dominant color basedon the reflection of the light. The image below shows how different types of water can be represented withdifferent colors. For example for deep water the dominant color could be navy blue.![symbol3D-water](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbol3d-water-colors.png)The color can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html#color)
     *
     * @default #0077BE
     */
    color: Color;
    /**
     * For WaterSymbol3DLayer the type is always `water`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html#type)
     */
    readonly type: "water";
    /**
     * Indicates the size of the waterbody which is represented by thesymbol layer. `small` can be set for small lakes,rivers or swimming pools, `medium` can be set for large lakes,whereas `large` is recommended for ocean and sea waterbodies.**Possible values:** small | medium | large
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html#waterbodySize)
     *
     * @default medium
     */
    waterbodySize: "small" | "medium" | "large";
    /**
     * Indicates the direction in which the waves travel. This value represents the geographic rotation in degrees and it ranges from0 to 360 degrees.A value of 0 degrees corresponds to geographic north, which means that the wave travels from south to north.The default is set to `null`, which will display the waves without a distinct direction.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html#waveDirection)
     *
     * @default null
     */
    waveDirection: number;
    /**
     * Indicates the shape and intensity of the waves. Currently only calm to moderate waterbodies can be represented.A `calm` wave strength represents water without waves, acting almost like a mirror. A water with `rippled` wave strengthhas very small and short waves. `slight` wave strength displays the waves with a more pronounced form, but they are still quite short.Choosing `moderate` will display waves with a longer form and a slightly increased intensity.**Possible values:** calm | rippled | slight | moderate
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html#waveStrength)
     *
     * @default moderate
     */
    waveStrength: "calm" | "rippled" | "slight" | "moderate";

    /**
     * Creates a deep clone of the symbol layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html#clone)
     *
     *
     */
    clone(): WaterSymbol3DLayer;
  }

  interface WaterSymbol3DLayerConstructor {
    new (properties?: WaterSymbol3DLayerProperties): WaterSymbol3DLayer;

    fromJSON(json: any): WaterSymbol3DLayer;
  }

  export const WaterSymbol3DLayer: WaterSymbol3DLayerConstructor;

  interface WaterSymbol3DLayerProperties extends Symbol3DLayerProperties {
    /**
     * The dominant color used to shade the water. The water has different shades of the dominant color basedon the reflection of the light. The image below shows how different types of water can be represented withdifferent colors. For example for deep water the dominant color could be navy blue.![symbol3D-water](https://developers.arcgis.com/javascript/assets/img/apiref/symbols/symbol3d-water-colors.png)The color can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html#color)
     *
     * @default #0077BE
     */
    color?: Color;
    /**
     * Indicates the size of the waterbody which is represented by thesymbol layer. `small` can be set for small lakes,rivers or swimming pools, `medium` can be set for large lakes,whereas `large` is recommended for ocean and sea waterbodies.**Possible values:** small | medium | large
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html#waterbodySize)
     *
     * @default medium
     */
    waterbodySize?: "small" | "medium" | "large";
    /**
     * Indicates the direction in which the waves travel. This value represents the geographic rotation in degrees and it ranges from0 to 360 degrees.A value of 0 degrees corresponds to geographic north, which means that the wave travels from south to north.The default is set to `null`, which will display the waves without a distinct direction.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html#waveDirection)
     *
     * @default null
     */
    waveDirection?: number;
    /**
     * Indicates the shape and intensity of the waves. Currently only calm to moderate waterbodies can be represented.A `calm` wave strength represents water without waves, acting almost like a mirror. A water with `rippled` wave strengthhas very small and short waves. `slight` wave strength displays the waves with a more pronounced form, but they are still quite short.Choosing `moderate` will display waves with a longer form and a slightly increased intensity.**Possible values:** calm | rippled | slight | moderate
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html#waveStrength)
     *
     * @default moderate
     */
    waveStrength?: "calm" | "rippled" | "slight" | "moderate";
  }

  interface WebStyleSymbol extends Symbol {
    /**
     * The name of the symbol within the web style. Each symbol in a web style is identifiedby a unique name. Only [Esri Web Style Symbols (2D)](https://developers.arcgis.com/javascript/latest/guide/esri-web-style-symbols-2d/index.html) and[Esri Web Style Symbols (3D)](https://developers.arcgis.com/javascript/latest/guide/esri-web-style-symbols-3d/index.html) can be referenced here.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#name)
     */
    name: string;
    /**
     * The portal that contains the web style this symbol refers to. Only required when [styleName](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#styleName) is set.Defaults to the value in [config.portalUrl](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#portalUrl)(e.g. https://www.arcgis.com).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#portal)
     */
    portal: Portal;
    /**
     * A registered web style name. Only[Esri Web Style Symbols (2D)](https://developers.arcgis.com/javascript/latest/guide/esri-web-style-symbols-2d/index.html) and[Esri Web Style Symbols (3D)](https://developers.arcgis.com/javascript/latest/guide/esri-web-style-symbols-3d/index.html) can be referenced here.Note that the 2D web style symbols are only supported in 2D and 3D web style symbols are only supported in 3D with anexception of [`EsriIconsStyle`](https://developers.arcgis.com/javascript/latest/guide/esri-web-style-symbols-3d/index.html#icons) which can be used in both 2D and 3D.Requires [portal](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#portal) property to be set.Can not be used in conjunction with [styleUrl](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#styleUrl).See class description for example.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#styleName)
     */
    styleName: string;
    /**
     * URL that points to the web style definition. Cannot be used in conjunction with [styleName](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#styleName) and[portal](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#portal).See class description for example.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#styleUrl)
     */
    styleUrl: string;
    /**
     * For WebStyleSymbol the type is always `web-style`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#type)
     */
    readonly type: "web-style";

    /**
     * Creates a deep clone of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#clone)
     *
     *
     */
    clone(): WebStyleSymbol;
    /**
     * Downloads and returns the [PointSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html) instance theWebStyleSymbol refers to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#fetchSymbol)
     *
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    fetchSymbol(options?: WebStyleSymbolFetchSymbolOptions): IPromise<PointSymbol3D>;
  }

  interface WebStyleSymbolConstructor {
    new (properties?: WebStyleSymbolProperties): WebStyleSymbol;

    fromJSON(json: any): WebStyleSymbol;
  }

  export const WebStyleSymbol: WebStyleSymbolConstructor;

  interface WebStyleSymbolProperties extends SymbolProperties {
    /**
     * The name of the symbol within the web style. Each symbol in a web style is identifiedby a unique name. Only [Esri Web Style Symbols (2D)](https://developers.arcgis.com/javascript/latest/guide/esri-web-style-symbols-2d/index.html) and[Esri Web Style Symbols (3D)](https://developers.arcgis.com/javascript/latest/guide/esri-web-style-symbols-3d/index.html) can be referenced here.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#name)
     */
    name?: string;
    /**
     * The portal that contains the web style this symbol refers to. Only required when [styleName](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#styleName) is set.Defaults to the value in [config.portalUrl](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#portalUrl)(e.g. https://www.arcgis.com).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#portal)
     */
    portal?: PortalProperties;
    /**
     * A registered web style name. Only[Esri Web Style Symbols (2D)](https://developers.arcgis.com/javascript/latest/guide/esri-web-style-symbols-2d/index.html) and[Esri Web Style Symbols (3D)](https://developers.arcgis.com/javascript/latest/guide/esri-web-style-symbols-3d/index.html) can be referenced here.Note that the 2D web style symbols are only supported in 2D and 3D web style symbols are only supported in 3D with anexception of [`EsriIconsStyle`](https://developers.arcgis.com/javascript/latest/guide/esri-web-style-symbols-3d/index.html#icons) which can be used in both 2D and 3D.Requires [portal](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#portal) property to be set.Can not be used in conjunction with [styleUrl](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#styleUrl).See class description for example.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#styleName)
     */
    styleName?: string;
    /**
     * URL that points to the web style definition. Cannot be used in conjunction with [styleName](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#styleName) and[portal](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#portal).See class description for example.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#styleUrl)
     */
    styleUrl?: string;
  }

  export interface WebStyleSymbolFetchSymbolOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#fetchSymbol)
     */
    signal?: AbortSignal;
  }

  /**
   * CIMSymbol.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#CIMSymbol)
   */
  export type symbolsCIMSymbol = CIMSymbol;

  /**
   * ExtrudeSymbol3DLayer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#ExtrudeSymbol3DLayer)
   */
  export type symbolsExtrudeSymbol3DLayer = ExtrudeSymbol3DLayer;

  /**
   * FillSymbol types.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#FillSymbol)
   */
  export type symbolsFillSymbol = PictureFillSymbol | SimpleFillSymbol;

  /**
   * FillSymbol3DLayer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#FillSymbol3DLayer)
   */
  export type symbolsFillSymbol3DLayer = FillSymbol3DLayer;

  /**
   * Font.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#Font)
   */
  export type symbolsFont = Font;

  /**
   * IconSymbol3DLayer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#IconSymbol3DLayer)
   */
  export type symbolsIconSymbol3DLayer = IconSymbol3DLayer;

  /**
   * LabelSymbol3D.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#LabelSymbol3D)
   */
  export type symbolsLabelSymbol3D = LabelSymbol3D;

  /**
   * LineSymbol3D.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#LineSymbol3D)
   */
  export type symbolsLineSymbol3D = LineSymbol3D;

  /**
   * LineSymbol3DLayer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#LineSymbol3DLayer)
   */
  export type symbolsLineSymbol3DLayer = LineSymbol3DLayer;

  /**
   * MarkerSymbol types.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#MarkerSymbol)
   */
  export type symbolsMarkerSymbol = PictureMarkerSymbol | SimpleMarkerSymbol;

  /**
   * MeshSymbol3D.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#MeshSymbol3D)
   */
  export type symbolsMeshSymbol3D = MeshSymbol3D;

  /**
   * ObjectSymbol3DLayer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#ObjectSymbol3DLayer)
   */
  export type symbolsObjectSymbol3DLayer = ObjectSymbol3DLayer;

  /**
   * PathSymbol3DLayer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#PathSymbol3DLayer)
   */
  export type symbolsPathSymbol3DLayer = PathSymbol3DLayer;

  /**
   * PictureFillSymbol.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#PictureFillSymbol)
   */
  export type symbolsPictureFillSymbol = PictureFillSymbol;

  /**
   * PictureMarkerSymbol.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#PictureMarkerSymbol)
   */
  export type symbolsPictureMarkerSymbol = PictureMarkerSymbol;

  /**
   * PointSymbol3D.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#PointSymbol3D)
   */
  export type symbolsPointSymbol3D = PointSymbol3D;

  /**
   * PolygonSymbol3D.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#PolygonSymbol3D)
   */
  export type symbolsPolygonSymbol3D = PolygonSymbol3D;

  /**
   * SimpleFillSymbol.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#SimpleFillSymbol)
   */
  export type symbolsSimpleFillSymbol = SimpleFillSymbol;

  /**
   * SimpleLineSymbol.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#SimpleLineSymbol)
   */
  export type symbolsSimpleLineSymbol = SimpleLineSymbol;

  /**
   * SimpleMarkerSymbol.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#SimpleMarkerSymbol)
   */
  export type symbolsSimpleMarkerSymbol = SimpleMarkerSymbol;

  /**
   * Symbol types.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#Symbol)
   */
  export type symbolsSymbol = Symbol2D | symbolsSymbol3D | WebStyleSymbol;

  /**
   * Symbol2D types.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#Symbol2D)
   */
  export type Symbol2D =
    | PictureFillSymbol
    | PictureMarkerSymbol
    | SimpleFillSymbol
    | SimpleLineSymbol
    | SimpleMarkerSymbol
    | TextSymbol;

  /**
   * Symbol2D3D types.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#Symbol2D3D)
   */
  export type Symbol2D3D =
    | PictureFillSymbol
    | PictureMarkerSymbol
    | SimpleFillSymbol
    | SimpleLineSymbol
    | SimpleMarkerSymbol
    | TextSymbol
    | Symbol2D
    | LabelSymbol3D
    | LineSymbol3D
    | MeshSymbol3D
    | PointSymbol3D
    | PolygonSymbol3D;

  /**
   * Symbol3D types.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#Symbol3D)
   */
  export type symbolsSymbol3D = LabelSymbol3D | LineSymbol3D | MeshSymbol3D | PointSymbol3D | PolygonSymbol3D;

  /**
   * Symbol3DLayer types.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#Symbol3DLayer)
   */
  export type symbolsSymbol3DLayer =
    | ExtrudeSymbol3DLayer
    | FillSymbol3DLayer
    | WaterSymbol3DLayer
    | IconSymbol3DLayer
    | LineSymbol3DLayer
    | ObjectSymbol3DLayer
    | PathSymbol3DLayer
    | TextSymbol3DLayer;

  /**
   * TextSymbol.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#TextSymbol)
   */
  export type symbolsTextSymbol = TextSymbol;

  /**
   * TextSymbol3DLayer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#TextSymbol3DLayer)
   */
  export type symbolsTextSymbol3DLayer = TextSymbol3DLayer;

  /**
   * WaterSymbol3DLayer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#WaterSymbol3DLayer)
   */
  export type symbolsWaterSymbol3DLayer = WaterSymbol3DLayer;

  /**
   * WebStyleSymbol.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#WebStyleSymbol)
   */
  export type symbolsWebStyleSymbol = WebStyleSymbol;

  interface ClosestFacilityTask extends Task {
    /**
     * Solves the closest facility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ClosestFacilityTask.html#solve)
     *
     * @param params Defines the parametersof the closest facility analysis.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    solve(params: ClosestFacilityParameters, requestOptions?: any): IPromise<ClosestFacilitySolveResult>;
  }

  interface ClosestFacilityTaskConstructor {
    new (properties?: ClosestFacilityTaskProperties): ClosestFacilityTask;
  }

  export const ClosestFacilityTask: ClosestFacilityTaskConstructor;

  interface ClosestFacilityTaskProperties extends TaskProperties {}

  interface FindTask extends Task {
    /**
     * The geodatabase version.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-FindTask.html#gdbVersion)
     */
    gdbVersion: string;

    /**
     * Sends a request to the ArcGIS REST map service resource to perform a search based on the input[params](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-FindTask.html#execute)
     *
     * @param params Specifies the layers and fields that are used for the search.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    execute(params: FindParameters, requestOptions?: any): IPromise<any>;
  }

  interface FindTaskConstructor {
    new (properties?: FindTaskProperties): FindTask;
  }

  export const FindTask: FindTaskConstructor;

  interface FindTaskProperties extends TaskProperties {
    /**
     * The geodatabase version.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-FindTask.html#gdbVersion)
     */
    gdbVersion?: string;
  }

  interface GeometryService extends Task {
    /**
     * Computes the area and length for the input [polygons](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#areasAndLengths)
     *
     * @param areasAndLengthsParameters Specify the input polygons and optionally the linear and area units.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    areasAndLengths(areasAndLengthsParameters: AreasAndLengthsParameters, requestOptions?: any): IPromise<any>;
    /**
     * The Auto Complete operation is performed on a geometry service resource. The AutoComplete operationsimplifies the process of constructing new polygons that are adjacent to other polygons. It constructspolygons that fill in the gaps between existing polygons and a set of polylines.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#autoComplete)
     *
     * @param polygons The array of polygons that will provide boundaries for new polygons.
     * @param polylines An array of polylines that will provide the remaining boundaries for new polygons.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    autoComplete(polygons: Polygon[], polylines: Polyline[], requestOptions?: any): IPromise<Polygon>;
    /**
     * Creates buffer polygons at a specified distance around the given geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#buffer)
     *
     * @param bufferParameters Specifies the input geometries,buffer distances, and other options.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    buffer(bufferParameters: BufferParameters, requestOptions?: any): IPromise<Polygon[]>;
    /**
     * The convexHull operation is performed on a geometry service resource. It returns the convex hullof the input geometry. The input geometry can be a point, multipoint, polyline or polygon. Thehull is typically a polygon but can also be a polyline or point in degenerate cases.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#convexHull)
     *
     * @param geometries The geometries whose convex hull is to be created.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    convexHull(geometries: Geometry[], requestOptions?: any): IPromise<Geometry>;
    /**
     * The cut operation is performed on a geometry service resource. This operation splits theinput polyline or polygon where it crosses a cutting polyline.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#cut)
     *
     * @param geometries The polylines or polygons to be cut.
     * @param cutter The polyline that will be used to dividethe target into pieces where it crosses the target.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    cut(geometries: Geometry[], cutter: Polyline, requestOptions?: any): IPromise<any>;
    /**
     * The densify operation is performed on a geometry service resource. This operation densifiesgeometries by plotting points between existing vertices.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#densify)
     *
     * @param densifyParameters The DensifyParameters objectscontains `geometries`, `geodesic`, `lengthUnit`, and `maxSegmentLength` properties.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    densify(densifyParameters: DensifyParameters, requestOptions?: any): IPromise<Geometry[]>;
    /**
     * The difference operation is performed on a geometry service resource. This operationconstructs the set-theoretic difference between an array of geometries and another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#difference)
     *
     * @param geometries An array of points, multipoints, polylines or polygons.
     * @param geometry A single geometry of any type, with a dimensionequal to or greater than the items in geometries.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    difference(geometries: Geometry[], geometry: Geometry, requestOptions?: any): IPromise<Geometry>;
    /**
     * Measures the planar or geodesic distance between geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#distance)
     *
     * @param params Sets the input geometries to measure,distance units, and other parameters.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    distance(params: DistanceParameters, requestOptions?: any): IPromise<number>;
    /**
     * Converts an array of well-known strings into xy-coordinates based on the conversion type and spatialreference supplied by the user. Only available with ArcGIS Server 10.3 or above.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#fromGeoCoordinateString)
     *
     * @param params See the object specifications table below for the structure of the  `params`  object.
     * @param params.strings An array of formatted strings as specified by `conversionType`.Example: `["01N AA 66021 00000" , "11S NT 00000 62155" , "31U BT 94071 65288"]`
     * @param params.sr The spatial reference or well-known ID toconvert the input string coordinates to.
     * @param params.conversionType The conversion type of the input strings.**Possible Values:** mrgs | usng | utm | geo-ref | gars | dms | ddm | dd
     * @param params.conversionMode Conversion options for mrgs, utm and gars conversion types. Seethe [ArcGIS REST API documentation](https://developers.arcgis.com/rest/services-reference/from-geocoordinatestring.htm)for possible values and their descriptions.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    fromGeoCoordinateString(params: GeometryServiceFromGeoCoordinateStringParams, requestOptions?: any): IPromise<any>;
    /**
     * Generalizes the input geometries using the Douglas-Peucker algorithm.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#generalize)
     *
     * @param params An array of geometries to generalizeand a maximum deviation. Optionally set the deviation units.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    generalize(params: GeneralizeParameters, requestOptions?: any): IPromise<Geometry[]>;
    /**
     * The intersect operation is performed on a geometry service resource. This operation constructsthe set-theoretic intersection between an array of geometries and another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#intersect)
     *
     * @param geometries An array of points, multipoints, polylines, or polygons.
     * @param intersector A single geometry of any type, of dimension equal to or greaterthan the dimension of the items in `geometries`.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    intersect(geometries: Geometry[], intersector: Geometry, requestOptions?: any): IPromise<Geometry[]>;
    /**
     * Calculates an interior point for each polygon specified. These interior points can be used by clients for labeling the polygons.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#labelPoints)
     *
     * @param polygons The polygon graphics to process.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    labelPoints(polygons: Polygon[], requestOptions?: any): IPromise<Point>;
    /**
     * Gets the lengths for a [Geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html) when the geometry type is [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#lengths)
     *
     * @param params Specify the polylines and optionally the length unit and the geodesic length option.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    lengths(params: LengthsParameters, requestOptions?: any): IPromise<any>;
    /**
     * Constructs the offset of the input geometries based on a planar distance. If the offsetDistance is positive the constructedoffset will be on the right side of the geometry. Left side offsets are constructed with negative values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#offset)
     *
     * @param params Set the geometries to offset, distance, and units.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    offset(params: OffsetParameters, requestOptions?: any): IPromise<Geometry[]>;
    /**
     * Projects a set of geometries to a new spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#project)
     *
     * @param params The input projection parameters.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    project(params: ProjectParameters, requestOptions?: any): IPromise<Geometry[]>;
    /**
     * Computes the set of pairs of geometries from the input geometry arrays that belong to the specified relation.Both arrays are assumed to be in the same spatial reference. The relations are evaluated in 2D. Z-coordinatesare not used. Geometry types cannot be mixed within an array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#relation)
     *
     * @param params The set of parameters required to perform the comparison.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    relation(params: RelationParameters, requestOptions?: any): IPromise<Polygon[]>;
    /**
     * The reshape operation is performed on a geometry service resource. It reshapes a [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) or a partof a [Polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) using a reshaping line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#reshape)
     *
     * @param targetGeometry The Polyline or Polygon to be reshaped.
     * @param reshaper The single-part polyline that performs the reshaping.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    reshape(targetGeometry: Geometry, reshaper: Geometry, requestOptions?: any): IPromise<Geometry>;
    /**
     * Alters the given geometries to make their definitions topologically legal with respect to their geometry type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#simplify)
     *
     * @param geometries The geometries to simplify.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    simplify(geometries: Geometry[], requestOptions?: any): IPromise<Geometry[]>;
    /**
     * Converts an array of XY-coordinates into well-known strings based on the conversion type and spatialreference supplied by the user. Only available with ArcGIS Server 10.3 or above.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#toGeoCoordinateString)
     *
     * @param params See the object specifications table below for the structure of the `params` object.
     * @param params.sr The spatial reference (or WKID of the spatial reference)of the XY-coordinates to be converted.
     * @param params.coordinates An array of XY-coordinates (in JSON format) to be converted.
     * @param params.conversionType The conversion type of the input strings.**Possible values:** mgrs | usng | utm | geo-ref | gars | dms | ddm | dd
     * @param params.conversionMode Conversion options for mgrs and utm conversion types. Seethe [ArcGIS REST API documentation](https://developers.arcgis.com/rest/services-reference/to-geocoordinatestring.htm)for valid conversion modes and their descriptions.
     * @param params.numOfDigits The number of digits to output for each of the numerical portions in the string.The default value depends of `conversionType`. See the [ArcGIS REST API documentation](https://developers.arcgis.com/rest/services-reference/from-geocoordinatestring.htm) for default values.
     * @param params.rounding If `true`, then numeric portions of the string are rounded to the nearest whole magnitudeas specified by `numOfDigits`. Otherwise, numeric portions of the string are truncated. The rounding parameter appliesonly to conversion types `mgrs`, `usng` and `geo-ref`.
     * @param params.addSpaces If `true`, then spaces are added between components of the string. The`addSpaces` parameter applies only to conversion types `mgrs`, `usng` and `utm`. The default value for `mgrs` is `false`, while the default value for both `usng` and `utm` is `true`.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    toGeoCoordinateString(params: GeometryServiceToGeoCoordinateStringParams, requestOptions?: any): IPromise<string[]>;
    /**
     * Trims or extends the input polylines using the user specified guide polyline. When trimming features,the portion to the left of the cutting line is preserved in the output and the rest is discarded. If theinput polyline is not cut or extended then an empty polyline is added to the output array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#trimExtend)
     *
     * @param params Input parameters for the `trimExtend` operation.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    trimExtend(params: TrimExtendParameters, requestOptions?: any): IPromise<Geometry[]>;
    /**
     * The union operation is performed on a geometry service resource. This operation constructs the set-theoreticunion of the geometries in the input array. All inputs must be of the same type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#union)
     *
     * @param geometries An array of the geometries to be unioned.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    union(geometries: Geometry[], requestOptions?: any): IPromise<Geometry>;
  }

  interface GeometryServiceConstructor {
    new (properties?: GeometryServiceProperties): GeometryService;
  }

  export const GeometryService: GeometryServiceConstructor;

  interface GeometryServiceProperties extends TaskProperties {}

  export interface GeometryServiceFromGeoCoordinateStringParams extends Object {
    /**
     * An array of formatted strings as specified by `conversionType`.Example: `["01N AA 66021 00000" , "11S NT 00000 62155" , "31U BT 94071 65288"]`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#fromGeoCoordinateString)
     */
    strings: string[];
    /**
     * The spatial reference or well-known ID toconvert the input string coordinates to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#fromGeoCoordinateString)
     */
    sr: SpatialReference | string | number;
    /**
     * The conversion type of the input strings.**Possible Values:** mrgs | usng | utm | geo-ref | gars | dms | ddm | dd
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#fromGeoCoordinateString)
     *
     * @default mrgs
     */
    conversionType?: string;
    /**
     * Conversion options for mrgs, utm and gars conversion types. Seethe [ArcGIS REST API documentation](https://developers.arcgis.com/rest/services-reference/from-geocoordinatestring.htm)for possible values and their descriptions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#fromGeoCoordinateString)
     */
    conversionMode?: string;
  }

  export interface GeometryServiceToGeoCoordinateStringParams extends Object {
    /**
     * The spatial reference (or WKID of the spatial reference)of the XY-coordinates to be converted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#toGeoCoordinateString)
     */
    sr: SpatialReference | string | number;
    /**
     * An array of XY-coordinates (in JSON format) to be converted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#toGeoCoordinateString)
     */
    coordinates: number[][];
    /**
     * The conversion type of the input strings.**Possible values:** mgrs | usng | utm | geo-ref | gars | dms | ddm | dd
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#toGeoCoordinateString)
     */
    conversionType: string;
    /**
     * Conversion options for mgrs and utm conversion types. Seethe [ArcGIS REST API documentation](https://developers.arcgis.com/rest/services-reference/to-geocoordinatestring.htm)for valid conversion modes and their descriptions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#toGeoCoordinateString)
     */
    conversionMode?: string;
    /**
     * The number of digits to output for each of the numerical portions in the string.The default value depends of `conversionType`. See the [ArcGIS REST API documentation](https://developers.arcgis.com/rest/services-reference/from-geocoordinatestring.htm) for default values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#toGeoCoordinateString)
     */
    numOfDigits?: number;
    /**
     * If `true`, then numeric portions of the string are rounded to the nearest whole magnitudeas specified by `numOfDigits`. Otherwise, numeric portions of the string are truncated. The rounding parameter appliesonly to conversion types `mgrs`, `usng` and `geo-ref`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#toGeoCoordinateString)
     *
     * @default true
     */
    rounding?: boolean;
    /**
     * If `true`, then spaces are added between components of the string. The`addSpaces` parameter applies only to conversion types `mgrs`, `usng` and `utm`. The default value for `mgrs` is `false`, while the default value for both `usng` and `utm` is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#toGeoCoordinateString)
     */
    addSpaces?: boolean;
  }

  interface Geoprocessor extends Task {
    /**
     * The spatial reference of the output geometries. If not specified, the output geometries will be in the spatial reference of the input geometries.If [processSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#processSpatialReference) is specified and `outSpatialReference` is not specified, the output geometrieswill be in the spatial reference of the process spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference;
    /**
     * The spatial reference that the model will use to perform geometry operations. If `processSpatialReference` is specified and[outputSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#outputSpatialReference) is not specified, the output geometries will be in the spatial reference of the process spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#processSpatialReference)
     */
    processSpatialReference: SpatialReference;
    /**
     * The time interval in milliseconds between each job status request sent to an asynchronous GP task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#updateDelay)
     *
     * @default 1000
     */
    updateDelay: number;

    /**
     * Cancels an asynchronous geoprocessing job. Requires an ArcGIS Server 10.1 service or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#cancelJob)
     *
     * @param jobId A string that uniquely identifies a job on the server. It is created when a job is submitted for                        execution and later used to check its status and retrieve the results.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    cancelJob(jobId: string, requestOptions?: any): IPromise<any>;
    /**
     * Cancels the periodic job status updates automatically initiated when [submitJob()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#submitJob) is invoked for the job identified by `jobId`.You can still obtain the status of this job by calling the [checkJobStatus()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#checkJobStatus) method at your own discretion.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#cancelJobStatusUpdates)
     *
     * @param jobId A string that uniquely identifies the job for which the job updates are cancelled.
     *
     */
    cancelJobStatusUpdates(jobId: string): void;
    /**
     * Sends a request to the GP Task for the current state of the job identified by `jobId`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#checkJobStatus)
     *
     * @param jobId The jobId returned from [JobInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-JobInfo.html).
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    checkJobStatus(jobId: string, requestOptions?: any): IPromise<JobInfo>;
    /**
     * Sends a request to the server to execute a synchronous GP task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#execute)
     *
     * @param params Specifies the input parameters accepted by the task and their corresponding values. These input parameters                         are listed in the parameters field of the associated GP Task resource. For example, assume that a GP Task                         resource has the following input parameters:* `<GPFeatureRecordSetLayer>` Input_Points* `<GPDouble>` DistanceThe `params` argument would then be an Object of the form:```{ Input_Points: <FeatureSet>, Distance: <Number>}```
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    execute(params: any, requestOptions?: any): IPromise<any>;
    /**
     * Sends a request to the GP Task to get the task result identified by `jobId` and `resultName`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#getResultData)
     *
     * @param jobId The jobId returned from [JobInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-JobInfo.html).
     * @param resultName The name of the result parameter as defined in Services Directory.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    getResultData(jobId: string, resultName: string, requestOptions?: any): IPromise<any>;
    /**
     * Sends a request to the GP Task to get the task result identified by `jobId` and `resultName` as an image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#getResultImage)
     *
     * @param jobId The jobId returned from [JobInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-JobInfo.html).
     * @param resultName The name of the result parameter as defined in the Services Directory.
     * @param imageParams Specifies the properties of the result image.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    getResultImage(
      jobId: string,
      resultName: string,
      imageParams: ImageParameters,
      requestOptions?: any
    ): IPromise<any>;
    /**
     * Get the task result identified by `jobId` as an[MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html). This method supports MapImageLayer 10.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#getResultMapImageLayer)
     *
     * @param jobId The jobId returned from [JobInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-JobInfo.html).
     *
     */
    getResultMapImageLayer(jobId: string): MapImageLayer;
    /**
     * Submits a job to the server for asynchronous processing by the GP task.The task execution results can be retrieved using the [getResultData()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#getResultData), [getResultImage()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#getResultImage),or [getResultMapImageLayer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#getResultMapImageLayer) methods.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#submitJob)
     *
     * @param params specifies the input parameters accepted by the task and their corresponding values. These input parameters                         are listed in the parameters field of the associated GP Task resource. For example, assume that a GP Task                         resource has the following input parameters:* `<GPFeatureRecordSetLayer>` Input_Points* `<GPDouble>` DistanceThe `params` argument would then be an Object of the form:```{ Input_Points: <FeatureSet>, Distance: <Number>}```
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    submitJob(params: any, requestOptions?: any): IPromise<JobInfo>;
  }

  interface GeoprocessorConstructor {
    new (properties?: GeoprocessorProperties): Geoprocessor;
  }

  export const Geoprocessor: GeoprocessorConstructor;

  interface GeoprocessorProperties extends TaskProperties {
    /**
     * The spatial reference of the output geometries. If not specified, the output geometries will be in the spatial reference of the input geometries.If [processSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#processSpatialReference) is specified and `outSpatialReference` is not specified, the output geometrieswill be in the spatial reference of the process spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties;
    /**
     * The spatial reference that the model will use to perform geometry operations. If `processSpatialReference` is specified and[outputSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#outputSpatialReference) is not specified, the output geometries will be in the spatial reference of the process spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#processSpatialReference)
     */
    processSpatialReference?: SpatialReferenceProperties;
    /**
     * The time interval in milliseconds between each job status request sent to an asynchronous GP task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#updateDelay)
     *
     * @default 1000
     */
    updateDelay?: number;
  }

  interface IdentifyTask extends Task {
    /**
     * Specifies the geodatabase version to display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-IdentifyTask.html#gdbVersion)
     */
    gdbVersion: string;

    /**
     * Sends a request to the ArcGIS REST map service resource to identify features based on the[IdentifyParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html) specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-IdentifyTask.html#execute)
     *
     * @param params Specifies the criteria used to identify the features.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    execute(params: IdentifyParameters, requestOptions?: any): IPromise<any>;
  }

  interface IdentifyTaskConstructor {
    new (properties?: IdentifyTaskProperties): IdentifyTask;
  }

  export const IdentifyTask: IdentifyTaskConstructor;

  interface IdentifyTaskProperties extends TaskProperties {
    /**
     * Specifies the geodatabase version to display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-IdentifyTask.html#gdbVersion)
     */
    gdbVersion?: string;
  }

  interface ImageServiceIdentifyTask extends Task {}

  interface ImageServiceIdentifyTaskConstructor {
    new (properties?: ImageServiceIdentifyTaskProperties): ImageServiceIdentifyTask;
  }

  export const ImageServiceIdentifyTask: ImageServiceIdentifyTaskConstructor;

  interface ImageServiceIdentifyTaskProperties extends TaskProperties {}

  interface Locator extends Task {
    /**
     * The spatial reference of the output geometries. If not specified, the output geometries are in the spatial reference ofthe input geometries when performing a reverse geocode and in the default spatial reference returned by the service iffinding locations by address.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference;

    /**
     * Find address candidates for multiple input addresses. This method requires an ArcGIS Server 10.1 or greater geocode service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressesToLocations)
     *
     * @param params See specifications below.
     * @param params.addresses The input addresses in the format supported by the geocode service. If the service supports                         'Single Line Input' the input addresses will be in the following format:```js{  "OBJECTID": 0,  "Single Line Input":"77 Main St, Plymouth, NH 03264"}```
     * @param params.countryCode Limits the results to only search in the country provided. For example `US` for United States or `SE` for Sweden. Only applies to theWorld Geocode Service. See the [World Geocoding Service documentation](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-category-filtering.htm) for more information.
     * @param params.categories Limit result to one or more categories. For example,                                    "Populated Place" or "Scandinavian Food". Only applies to the World Geocode Service.                                    See [Category filtering (World Geocoding Service)](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-category-filtering.htm#ESRI_SECTION1_502B3FE2028145D7B189C25B1A00E17B) for more information.
     * @param params.locationType Define the type of location, either `"street"` or `"rooftop"`, of the point returned from the[World Geocoding Service](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-category-filtering.htm).
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    addressesToLocations(params: LocatorAddressesToLocationsParams, requestOptions?: any): IPromise<AddressCandidate[]>;
    /**
     * Sends a request to the ArcGIS REST geocode resource to find candidates for a single address specified in the address parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressToLocations)
     *
     * @param params Specify at least the `address` and optionally other properties.                         See the object specifications table below.
     * @param params.address The address argument is data object that contains properties representing the various                               address fields accepted by the corresponding geocode service. These fields are listed in the                               addressFields property of the associated geocode service resource.For example, if the *addressFields* of a geocode service resource includes fields with the following names:Street, City, State and Zone, then the address argument is of the form:```js{  Street: "1234 W Main St",  City: "Small Town",  State: "WA",  Zone: "99027"}```Locators published using ArcGIS 10 or later support a single line address field, whichcan be specified using the following syntax where field_name is the name of the singleline address field. You can find this name by viewing the help or services directory foryour locator services. Common values are *SingleLine* and *SingleLineFieldName*:```jsvar address = {  "field_name": "380 New York St, Redlands, CA 92373"};```The Services Directory can be used to find out the required and optional address fieldsand the correct names for the input name fields. If you are using the World Geocoding Servicevisit the ArcGIS Online Geocoding Service help for more details on the World Geocoder.
     * @param params.categories Limit result to one or more categories. For example,                                    "Populated Place" or "Scandinavian Food". Only applies to the World Geocode Service.                                    See [Category filtering (World Geocoding Service)](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-category-filtering.htm#ESRI_SECTION1_502B3FE2028145D7B189C25B1A00E17B) for more information.
     * @param params.countryCode Limit result to a specific country. For example, "US" for United States or "SE" for Sweden.                            Only applies to the World Geocode Service. See Geocode coverage (World Geocoding Service)                            for more information.
     * @param params.forStorage Allows the results of single geocode transactions to be persisted.
     * @param params.location Used to weight returned results for a specified area.
     * @param params.locationType Define the type of location, either `"street"` or `"rooftop"`, of the point returned from the[World Geocoding Service](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-category-filtering.htm).
     * @param params.magicKey A `suggestLocations` result ID (magicKey). Used to query for a specific results information.
     * @param params.maxLocations Maximum results to return from the query.
     * @param params.outFields The list of fields included in the returned result set. This list is a comma delimited                                   list of field names. If you specify the shape field in the list of return fields, it is ignored.                                   For non-intersection addresses you can specify the candidate fields as defined in the geocode                                   service. For intersection addresses you can specify the intersection candidate fields.
     * @param params.searchExtent Defines the extent within which the geocode server will search.                                                         Requires ArcGIS Server version 10.1 or greater.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override `requestOptions` defined during construction).
     *
     */
    addressToLocations(params: LocatorAddressToLocationsParams, requestOptions?: any): IPromise<AddressCandidate[]>;
    /**
     * Locates an address based on a given point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#locationToAddress)
     *
     * @param params Specify at least the `location` and optionally the `locationType`.
     * @param params.location The point at which to search for the closest address. The location                                               should be in the same spatial reference as that of the geocode service.
     * @param params.locationType Define the type of location, either `"street"` or `"rooftop"`, of the point returned from the[World Geocoding Service](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-category-filtering.htm).
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    locationToAddress(params: LocatorLocationToAddressParams, requestOptions?: any): IPromise<AddressCandidate>;
    /**
     * Get character by character auto complete suggestions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#suggestLocations)
     *
     * @param params An object that defines suggest parameters. See specifications below.
     * @param params.categories A place or address type which can be used to filter suggest results.                                    The parameter supports input of single category values or multiple comma-separated values.
     * @param params.location Defines a normalized location point that is used to sort geocoding candidates based upon their proximity                                                    to the given location.
     * @param params.text The input text entered by a user which is used by the suggest operation to generate a                            list of possible matches.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    suggestLocations(params: LocatorSuggestLocationsParams, requestOptions?: any): IPromise<SuggestionResult[]>;
  }

  interface LocatorConstructor {
    new (properties?: LocatorProperties): Locator;
  }

  export const Locator: LocatorConstructor;

  interface LocatorProperties extends TaskProperties {
    /**
     * The spatial reference of the output geometries. If not specified, the output geometries are in the spatial reference ofthe input geometries when performing a reverse geocode and in the default spatial reference returned by the service iffinding locations by address.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties;
  }

  export interface LocatorAddressesToLocationsParams extends Object {
    /**
     * The input addresses in the format supported by the geocode service. If the service supports                         'Single Line Input' the input addresses will be in the following format:```js{  "OBJECTID": 0,  "Single Line Input":"77 Main St, Plymouth, NH 03264"}```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressesToLocations)
     */
    addresses: any[];
    /**
     * Limits the results to only search in the country provided. For example `US` for United States or `SE` for Sweden. Only applies to theWorld Geocode Service. See the [World Geocoding Service documentation](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-category-filtering.htm) for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressesToLocations)
     */
    countryCode?: string;
    /**
     * Limit result to one or more categories. For example,                                    "Populated Place" or "Scandinavian Food". Only applies to the World Geocode Service.                                    See [Category filtering (World Geocoding Service)](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-category-filtering.htm#ESRI_SECTION1_502B3FE2028145D7B189C25B1A00E17B) for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressesToLocations)
     */
    categories?: string[];
    /**
     * Define the type of location, either `"street"` or `"rooftop"`, of the point returned from the[World Geocoding Service](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-category-filtering.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressesToLocations)
     */
    locationType?: string;
  }

  export interface LocatorAddressToLocationsParams extends Object {
    /**
     * The address argument is data object that contains properties representing the various                               address fields accepted by the corresponding geocode service. These fields are listed in the                               addressFields property of the associated geocode service resource.For example, if the *addressFields* of a geocode service resource includes fields with the following names:Street, City, State and Zone, then the address argument is of the form:```js{  Street: "1234 W Main St",  City: "Small Town",  State: "WA",  Zone: "99027"}```Locators published using ArcGIS 10 or later support a single line address field, whichcan be specified using the following syntax where field_name is the name of the singleline address field. You can find this name by viewing the help or services directory foryour locator services. Common values are *SingleLine* and *SingleLineFieldName*:```jsvar address = {  "field_name": "380 New York St, Redlands, CA 92373"};```The Services Directory can be used to find out the required and optional address fieldsand the correct names for the input name fields. If you are using the World Geocoding Servicevisit the ArcGIS Online Geocoding Service help for more details on the World Geocoder.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressToLocations)
     */
    address: any;
    /**
     * Limit result to one or more categories. For example,                                    "Populated Place" or "Scandinavian Food". Only applies to the World Geocode Service.                                    See [Category filtering (World Geocoding Service)](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-category-filtering.htm#ESRI_SECTION1_502B3FE2028145D7B189C25B1A00E17B) for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressToLocations)
     */
    categories?: string[];
    /**
     * Limit result to a specific country. For example, "US" for United States or "SE" for Sweden.                            Only applies to the World Geocode Service. See Geocode coverage (World Geocoding Service)                            for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressToLocations)
     */
    countryCode?: string;
    /**
     * Allows the results of single geocode transactions to be persisted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressToLocations)
     */
    forStorage?: boolean;
    /**
     * Used to weight returned results for a specified area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressToLocations)
     */
    location?: Point;
    /**
     * Define the type of location, either `"street"` or `"rooftop"`, of the point returned from the[World Geocoding Service](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-category-filtering.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressToLocations)
     */
    locationType?: string;
    /**
     * A `suggestLocations` result ID (magicKey). Used to query for a specific results information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressToLocations)
     */
    magicKey?: string;
    /**
     * Maximum results to return from the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressToLocations)
     */
    maxLocations?: number;
    /**
     * The list of fields included in the returned result set. This list is a comma delimited                                   list of field names. If you specify the shape field in the list of return fields, it is ignored.                                   For non-intersection addresses you can specify the candidate fields as defined in the geocode                                   service. For intersection addresses you can specify the intersection candidate fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressToLocations)
     */
    outFields?: string[];
    /**
     * Defines the extent within which the geocode server will search.                                                         Requires ArcGIS Server version 10.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressToLocations)
     */
    searchExtent?: Extent;
  }

  export interface LocatorLocationToAddressParams extends Object {
    /**
     * The point at which to search for the closest address. The location                                               should be in the same spatial reference as that of the geocode service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#locationToAddress)
     */
    location: Point;
    /**
     * Define the type of location, either `"street"` or `"rooftop"`, of the point returned from the[World Geocoding Service](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-category-filtering.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#locationToAddress)
     */
    locationType?: string;
  }

  export interface LocatorSuggestLocationsParams extends Object {
    /**
     * A place or address type which can be used to filter suggest results.                                    The parameter supports input of single category values or multiple comma-separated values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#suggestLocations)
     */
    categories?: string[];
    /**
     * Defines a normalized location point that is used to sort geocoding candidates based upon their proximity                                                    to the given location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#suggestLocations)
     */
    location: Point;
    /**
     * The input text entered by a user which is used by the suggest operation to generate a                            list of possible matches.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#suggestLocations)
     */
    text: string;
  }

  /**
   * Describes the object representing the result of the[suggestLocations()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#suggestLocations) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#SuggestionResult)
   */
  export interface SuggestionResult extends Object {
    /**
     * Indicates if the result is a Collection.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#SuggestionResult)
     */
    isCollection: boolean;
    /**
     * ID used in combination with the `text` property                   to uniquely identify a suggestion.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#SuggestionResult)
     */
    magicKey: string;
    /**
     * The string name of the suggested location to geocode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#SuggestionResult)
     */
    text: string;
  }

  interface PrintTask extends Task {
    /**
     * The mode for the print task execution.**Possible Values:** async | sync
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-PrintTask.html#mode)
     *
     * @default sync
     */
    readonly mode: string;
    /**
     * The time interval in milliseconds between each job status request sent to an asynchronous GP task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-PrintTask.html#updateDelay)
     *
     * @default 1000
     */
    updateDelay: number;

    /**
     * Sends a request to the print service to create a printable static image of the map using the options specified inthe [PrintParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintParameters.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-PrintTask.html#execute)
     *
     * @param params Defines the printing options.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    execute(params: PrintParameters, requestOptions?: any): IPromise<PrintResponse>;
  }

  interface PrintTaskConstructor {
    new (properties?: PrintTaskProperties): PrintTask;
  }

  export const PrintTask: PrintTaskConstructor;

  interface PrintTaskProperties extends TaskProperties {
    /**
     * The time interval in milliseconds between each job status request sent to an asynchronous GP task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-PrintTask.html#updateDelay)
     *
     * @default 1000
     */
    updateDelay?: number;
  }

  /**
   * Represents the response of the [execute()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-PrintTask.html#execute) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-PrintTask.html#PrintResponse)
   */
  export interface PrintResponse extends Object {
    /**
     * URL pointing to the location of the generated printout of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-PrintTask.html#PrintResponse)
     */
    url: string;
  }

  interface QueryTask extends Task {
    /**
     * Specify the geodatabase version to query. Requires ArcGIS Server service 10.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html#gdbVersion)
     */
    gdbVersion: string;

    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html) against the layer specified in the [url](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html#url). The result is returned as a[FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html), which can be accessed using the `.then()` method.A [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html) contains an array of [Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html)features, which can be added to the map. This array will not be populated if no results are found.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html#execute)
     *
     * @param query Specifies the attributes and spatial filter of the query.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    execute(query: Query | QueryProperties, requestOptions?: any): IPromise<FeatureSet>;
    /**
     * Query information about attachments associated with features from a[feature layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) specified in the [url](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html#url). It will return an error ifthe layer's [capabilities.data.supportsAttachment](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) is set to false.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html#executeAttachmentQuery)
     *
     * @param attachmentQuery Specifies the attachment parameters for query.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    executeAttachmentQuery(
      attachmentQuery: AttachmentQuery | AttachmentQueryProperties,
      requestOptions?: any
    ): IPromise<any>;
    /**
     * Gets a count of the number of features that satisfy the input query. Valid for layerspublished with 10.0 SP1.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html#executeForCount)
     *
     * @param query Specifies the attributes and spatial filter of the query.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    executeForCount(query: Query | QueryProperties, requestOptions?: any): IPromise<number>;
    /**
     * Gets the extent of the features that satisfy the input query. The count of features thatsatisfy the input query is returned upon resolution as well. At 10.3, this option is only availablefor [hosted feature services](https://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm).At 10.3.1, this option is available for all feature services and map service layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html#executeForExtent)
     *
     * @param params Specifies the attributes and spatial filter of the query.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    executeForExtent(params: Query, requestOptions?: any): IPromise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html) against the layer specified in the [url](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html#url).The result is an array of the object IDs of features that satisfy the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html#executeForIds)
     *
     * @param query Specifies the attributes and spatial filter of the query.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    executeForIds(query: Query | QueryProperties, requestOptions?: any): IPromise<number[]>;
    /**
     * Executes a [RelationshipQuery](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html) against the layer or table specified in the [url](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html#url).If the query is successful, the returned results are[FeatureSets](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html) grouped by source layer or table objectIds.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html#executeRelationshipQuery)
     *
     * @param relationshipQuery Specifies relationship parametersfor querying related features or records from a layer or a table.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    executeRelationshipQuery(
      relationshipQuery: RelationshipQuery | RelationshipQueryProperties,
      requestOptions?: any
    ): IPromise<any>;
  }

  interface QueryTaskConstructor {
    new (properties?: QueryTaskProperties): QueryTask;
  }

  export const QueryTask: QueryTaskConstructor;

  interface QueryTaskProperties extends TaskProperties {
    /**
     * Specify the geodatabase version to query. Requires ArcGIS Server service 10.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html#gdbVersion)
     */
    gdbVersion?: string;
  }

  interface RouteTask extends Task {
    /**
     * Solves the route against the route layer with the route parameters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html#solve)
     *
     * @param params Route parameters used as input to generate the route.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    solve(params: RouteParameters, requestOptions?: any): IPromise<RouteResult>;
  }

  interface RouteTaskConstructor {
    new (properties?: RouteTaskProperties): RouteTask;
  }

  export const RouteTask: RouteTaskConstructor;

  interface RouteTaskProperties extends TaskProperties {}

  interface ServiceAreaTask extends Task {
    /**
     * Determines the service area based on a set of parameters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ServiceAreaTask.html#solve)
     *
     * @param params The parameters needed to define the service area.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for the data request(will override requestOptions defined during construction).
     *
     */
    solve(params: ServiceAreaParameters, requestOptions?: any): IPromise<ServiceAreaSolveResult>;
  }

  interface ServiceAreaTaskConstructor {
    new (properties?: ServiceAreaTaskProperties): ServiceAreaTask;
  }

  export const ServiceAreaTask: ServiceAreaTaskConstructor;

  interface ServiceAreaTaskProperties extends TaskProperties {}

  interface AddressCandidate extends Accessor, JSONSupport {
    /**
     * Address of the candidate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AddressCandidate.html#address)
     */
    address: string;
    /**
     * Name value pairs of field name and field value as defined in `outFields`in [Locator.addressToLocations()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressToLocations).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AddressCandidate.html#attributes)
     */
    attributes: any;
    /**
     * The minimum and maximum X and Y coordinates of a bounding box of the address candidate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AddressCandidate.html#extent)
     */
    extent: Extent;
    /**
     * The [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) object representing the location of the[address](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AddressCandidate.html#address).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AddressCandidate.html#location)
     */
    location: Point;
    /**
     * Numeric score between `0` and `100` for geocode candidates. A candidate with a scoreof `100` means a perfect match, and `0` means no match.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AddressCandidate.html#score)
     */
    score: number;
  }

  interface AddressCandidateConstructor {
    new (properties?: AddressCandidateProperties): AddressCandidate;

    fromJSON(json: any): AddressCandidate;
  }

  export const AddressCandidate: AddressCandidateConstructor;

  interface AddressCandidateProperties {
    /**
     * Address of the candidate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AddressCandidate.html#address)
     */
    address?: string;
    /**
     * Name value pairs of field name and field value as defined in `outFields`in [Locator.addressToLocations()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressToLocations).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AddressCandidate.html#attributes)
     */
    attributes?: any;
    /**
     * The minimum and maximum X and Y coordinates of a bounding box of the address candidate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AddressCandidate.html#extent)
     */
    extent?: ExtentProperties;
    /**
     * The [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) object representing the location of the[address](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AddressCandidate.html#address).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AddressCandidate.html#location)
     */
    location?: PointProperties;
    /**
     * Numeric score between `0` and `100` for geocode candidates. A candidate with a scoreof `100` means a perfect match, and `0` means no match.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AddressCandidate.html#score)
     */
    score?: number;
  }

  interface AlgorithmicColorRamp extends ColorRamp {
    /**
     * The algorithm used to generate the colors between the `fromColor` and `toColor`. Each algorithm uses different methods forgenerating the intervening colors.Possible Value | Description---------------|------------cie-lab | Blends the from and to colors without traversing the intervening hue space.lab-lch | The hue, saturation, value (hsv) algorithm is a linear traverse of colors between pairs: Color 1 H to Color 2 H, Color 1 S to Color 2 S, and Color 1 V to Color 2 V.hsv | The lab-lch algorithm is very similar to the cie-lab but does not seek the shortest path between colors.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AlgorithmicColorRamp.html#algorithm)
     */
    algorithm: "cie-lab" | "lab-lch" | "hsv";
    /**
     * The first color in the color ramp.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AlgorithmicColorRamp.html#fromColor)
     */
    fromColor: Color;
    /**
     * The last color in the color ramp.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AlgorithmicColorRamp.html#toColor)
     */
    toColor: Color;
    /**
     * A string value representing the color ramp type. This value is always `algorithmic`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AlgorithmicColorRamp.html#type)
     *
     * @default algorithmic
     */
    readonly type: "algorithmic";

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AlgorithmicColorRamp.html#clone)
     *
     *
     */
    clone(): AlgorithmicColorRamp;
  }

  interface AlgorithmicColorRampConstructor {
    new (properties?: AlgorithmicColorRampProperties): AlgorithmicColorRamp;

    fromJSON(json: any): AlgorithmicColorRamp;
  }

  export const AlgorithmicColorRamp: AlgorithmicColorRampConstructor;

  interface AlgorithmicColorRampProperties extends ColorRampProperties {
    /**
     * The algorithm used to generate the colors between the `fromColor` and `toColor`. Each algorithm uses different methods forgenerating the intervening colors.Possible Value | Description---------------|------------cie-lab | Blends the from and to colors without traversing the intervening hue space.lab-lch | The hue, saturation, value (hsv) algorithm is a linear traverse of colors between pairs: Color 1 H to Color 2 H, Color 1 S to Color 2 S, and Color 1 V to Color 2 V.hsv | The lab-lch algorithm is very similar to the cie-lab but does not seek the shortest path between colors.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AlgorithmicColorRamp.html#algorithm)
     */
    algorithm?: "cie-lab" | "lab-lch" | "hsv";
    /**
     * The first color in the color ramp.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AlgorithmicColorRamp.html#fromColor)
     */
    fromColor?: Color;
    /**
     * The last color in the color ramp.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AlgorithmicColorRamp.html#toColor)
     */
    toColor?: Color;
  }

  interface AreasAndLengthsParameters extends Accessor {
    /**
     * The area unit in which areas of polygons will be calculated. Use the strings listed below or[any other valid area unit](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.AreaUnit.Code.ACRE).**Possible Values:** acres | hectares | square-miles | square-kilometers | square-meters | square-feet | square-yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AreasAndLengthsParameters.html#areaUnit)
     */
    areaUnit: string;
    /**
     * Defines the type of calculation for the geometry. The type can be one of the following:Value | Description------|------------planar | Planar measurements use 2D Cartesian mathematics to calculate length. Use this type if the length needs to be calculated in the input spatial reference. Otherwise use `preserveShape`.geodesic | Use this type to calculate an area or length using only the vertices of the polygon to define the lines connecting the vertices as geodesic segments independent of the actual shape of the polygon. **Note:** a geodesic segment is the shortest path between two points on an ellipsoid.preserve-shape | Calculate the area or length of the geometry on the surface of the Earth ellipsoid (for geometries defined in a projected or geographic coordinate system). This method preserves the shape of the geometry in its coordinate system, which means the true area or length will be calculated for the geometry that is displayed on the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AreasAndLengthsParameters.html#calculationType)
     */
    calculationType: string;
    /**
     * The length unit in which perimeters of polygons will be calculated.Use one of the possible values listed below or any of the[numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).**Possible Values:** feet | kilometers | meters | miles | nautical-miles | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AreasAndLengthsParameters.html#lengthUnit)
     */
    lengthUnit: string;
    /**
     * Polygon geometries for which to compute areas and lengths.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AreasAndLengthsParameters.html#polygons)
     */
    polygons: Polygon[];

    /**
     * Converts an instance of  [this class]() to its ArcGIS portal JSON representation.See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html) topic in the Guide for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AreasAndLengthsParameters.html#toJSON)
     *
     *
     */
    toJSON(): any;
  }

  interface AreasAndLengthsParametersConstructor {
    new (properties?: AreasAndLengthsParametersProperties): AreasAndLengthsParameters;
  }

  export const AreasAndLengthsParameters: AreasAndLengthsParametersConstructor;

  interface AreasAndLengthsParametersProperties {
    /**
     * The area unit in which areas of polygons will be calculated. Use the strings listed below or[any other valid area unit](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.AreaUnit.Code.ACRE).**Possible Values:** acres | hectares | square-miles | square-kilometers | square-meters | square-feet | square-yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AreasAndLengthsParameters.html#areaUnit)
     */
    areaUnit?: string;
    /**
     * Defines the type of calculation for the geometry. The type can be one of the following:Value | Description------|------------planar | Planar measurements use 2D Cartesian mathematics to calculate length. Use this type if the length needs to be calculated in the input spatial reference. Otherwise use `preserveShape`.geodesic | Use this type to calculate an area or length using only the vertices of the polygon to define the lines connecting the vertices as geodesic segments independent of the actual shape of the polygon. **Note:** a geodesic segment is the shortest path between two points on an ellipsoid.preserve-shape | Calculate the area or length of the geometry on the surface of the Earth ellipsoid (for geometries defined in a projected or geographic coordinate system). This method preserves the shape of the geometry in its coordinate system, which means the true area or length will be calculated for the geometry that is displayed on the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AreasAndLengthsParameters.html#calculationType)
     */
    calculationType?: string;
    /**
     * The length unit in which perimeters of polygons will be calculated.Use one of the possible values listed below or any of the[numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).**Possible Values:** feet | kilometers | meters | miles | nautical-miles | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AreasAndLengthsParameters.html#lengthUnit)
     */
    lengthUnit?: string;
    /**
     * Polygon geometries for which to compute areas and lengths.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AreasAndLengthsParameters.html#polygons)
     */
    polygons?: PolygonProperties[];
  }

  interface AttachmentQuery extends Accessor, JSONSupport {
    /**
     * The file format that is supported by query attachment. For example, `image/jpeg`.See the [ArcGIS REST API documentation](https://developers.arcgis.com/rest/services-reference/query-attachments-feature-service-layer-.htm)for more information on supported attachment types.Requires an ArcGIS Server service 10.5 or greater andfeature layer's [capabilities.query.supportsAttachments](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) to be `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#attachmentTypes)
     */
    attachmentTypes: string[];
    /**
     * An array of globalIds for the features in the layer being queried. The query results will return attachmentsonly for specified global ids.Requires an ArcGIS Server service 10.5 or greater andfeature layer's [capabilities.query.supportsAttachments](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)to be `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#globalIds)
     */
    globalIds: number[];
    /**
     * The number of features to retrieve. This option should be used in conjunction with the [start property](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#start). Use this toimplement paging (i.e. to retrieve "pages" of results when querying). Default Value is `10`.If not provided, but an instance of AttachmentQuery has a `start` property, then the default value of `num` is `maxRecordCount`.The maximum value for this parameter is the value of the layer's `maxRecordCount` of the service, which can be found atthe REST endpoint of the feature layer.Requires an ArcGIS Server service 10.5 or greater andfeature layer's [capabilities.query.supportsAttachments](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) to be `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#num)
     */
    num: number;
    /**
     * An array of objectIds of the features to be queried for attachments.When the feature layer's [capabilities.query.supportsAttachments](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) property is`false`, it only accepts a single `objectId`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#objectIds)
     */
    objectIds: number[];
    /**
     * If `true`, the [exif information](http://www.cipa.jp/std/documents/e/DC-008-Translation-2016-E.pdf) for the attachment will be included in[attachmentInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#exifInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#returnMetadata)
     *
     * @default false
     */
    returnMetadata: boolean;
    /**
     * The file size of the attachment is specified in bytes. You can enter afile size range [1000,15000] to query for attachments. The query result will returnall attachments within the specified file size range (1000 - 15000).Requires an ArcGIS Server service 10.5 or greater andfeature layer's [capabilities.query.supportsAttachments](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)to be `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#size)
     */
    size: number[];
    /**
     * This option fetches query results by skipping a specified number of records. The query results start from the next record.The default value is `0`. This parameter only applies when the feature layer's[capabilities.query.supportsPagination](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) is `true`. You can use this option tofetch records that are beyond `maxRecordCount`.Requires an ArcGIS Server service 10.5 or greater andfeature layer's [capabilities.query.supportsAttachments](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) to be `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#start)
     */
    start: number;
    /**
     * The `where` clause to be applied to the layer. Only features that satisfy the `where` clauseand are in the list of [objectIds](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#objectIds) will be returned. Requires an ArcGIS Server service 10.5 or greater andfeature layer's [capabilities.query.supportsAttachments](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)to be `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#where)
     */
    where: string;

    /**
     * Creates a deep clone of AttachmentQuery object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#clone)
     *
     *
     */
    clone(): AttachmentQuery;
  }

  interface AttachmentQueryConstructor {
    new (properties?: AttachmentQueryProperties): AttachmentQuery;

    fromJSON(json: any): AttachmentQuery;
  }

  export const AttachmentQuery: AttachmentQueryConstructor;

  interface AttachmentQueryProperties {
    /**
     * The file format that is supported by query attachment. For example, `image/jpeg`.See the [ArcGIS REST API documentation](https://developers.arcgis.com/rest/services-reference/query-attachments-feature-service-layer-.htm)for more information on supported attachment types.Requires an ArcGIS Server service 10.5 or greater andfeature layer's [capabilities.query.supportsAttachments](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) to be `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#attachmentTypes)
     */
    attachmentTypes?: string[];
    /**
     * An array of globalIds for the features in the layer being queried. The query results will return attachmentsonly for specified global ids.Requires an ArcGIS Server service 10.5 or greater andfeature layer's [capabilities.query.supportsAttachments](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)to be `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#globalIds)
     */
    globalIds?: number[];
    /**
     * The number of features to retrieve. This option should be used in conjunction with the [start property](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#start). Use this toimplement paging (i.e. to retrieve "pages" of results when querying). Default Value is `10`.If not provided, but an instance of AttachmentQuery has a `start` property, then the default value of `num` is `maxRecordCount`.The maximum value for this parameter is the value of the layer's `maxRecordCount` of the service, which can be found atthe REST endpoint of the feature layer.Requires an ArcGIS Server service 10.5 or greater andfeature layer's [capabilities.query.supportsAttachments](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) to be `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#num)
     */
    num?: number;
    /**
     * An array of objectIds of the features to be queried for attachments.When the feature layer's [capabilities.query.supportsAttachments](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) property is`false`, it only accepts a single `objectId`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#objectIds)
     */
    objectIds?: number[];
    /**
     * If `true`, the [exif information](http://www.cipa.jp/std/documents/e/DC-008-Translation-2016-E.pdf) for the attachment will be included in[attachmentInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html#exifInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#returnMetadata)
     *
     * @default false
     */
    returnMetadata?: boolean;
    /**
     * The file size of the attachment is specified in bytes. You can enter afile size range [1000,15000] to query for attachments. The query result will returnall attachments within the specified file size range (1000 - 15000).Requires an ArcGIS Server service 10.5 or greater andfeature layer's [capabilities.query.supportsAttachments](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)to be `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#size)
     */
    size?: number[];
    /**
     * This option fetches query results by skipping a specified number of records. The query results start from the next record.The default value is `0`. This parameter only applies when the feature layer's[capabilities.query.supportsPagination](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) is `true`. You can use this option tofetch records that are beyond `maxRecordCount`.Requires an ArcGIS Server service 10.5 or greater andfeature layer's [capabilities.query.supportsAttachments](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) to be `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#start)
     */
    start?: number;
    /**
     * The `where` clause to be applied to the layer. Only features that satisfy the `where` clauseand are in the list of [objectIds](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#objectIds) will be returned. Requires an ArcGIS Server service 10.5 or greater andfeature layer's [capabilities.query.supportsAttachments](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)to be `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#where)
     */
    where?: string;
  }

  interface BufferParameters extends Accessor {
    /**
     * The spatial reference in which the geometries are buffered.If `bufferSpatialReference` is not specified, the geometries are buffered in the spatialreference specified by `outSpatialReference`. If `outSpatialReference` is also not specified,they are buffered in the spatial reference of the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-BufferParameters.html#bufferSpatialReference)
     */
    bufferSpatialReference: SpatialReference;
    /**
     * The distances the input features are buffered. The distance units are specified by `unit`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-BufferParameters.html#distances)
     */
    distances: number[];
    /**
     * If the input geometries are in a geographic coordinate system, set geodesic to `true` togenerate a buffer polygon using a geodesic distance. The `bufferSpatialReference` property isignored when geodesic is set to `true`. Requires ArcGIS Server 10.1 or greater geometry service.For more information, see the ArcGIS REST API documentation on the GeometryService bufferoperation and the geodesic property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-BufferParameters.html#geodesic)
     */
    geodesic: boolean;
    /**
     * The input geometries to buffer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-BufferParameters.html#geometries)
     */
    geometries: Geometry[];
    /**
     * The spatial reference for the returned geometries.If `outSpatialReference` is not specified, the output geometries are in the spatial referencespecified by `bufferSpatialReference`. If `bufferSpatialReference` also is not specified, theyare in the spatial reference of the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-BufferParameters.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference;
    /**
     * If `true`, all geometries buffered at a given distance are unioned into a single (possiblymultipart) polygon, and the unioned geometry is placed in the output array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-BufferParameters.html#unionResults)
     */
    unionResults: boolean;
    /**
     * The units for calculating each buffer distance. If `unit` is not specified, the units arederived from `bufferSpatialReference`. If `bufferSpatialReference` is not specified,the units are derived from the features.For a list of valid units, see [esriSRUnitType Constants](http://resources.arcgis.com/en/help/arcobjects-cpp/componenthelp/index.html#/esriSRUnitType_Constants/000w00000042000000/) and [esriSRUnit2Type Constants](http://resources.arcgis.com/en/help/arcobjects-cpp/componenthelp/index.html#/esriSRUnit2Type_Constants/000w00000041000000/).**Possible Values:** feet | kilometers | meters | miles | nautical-miles | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-BufferParameters.html#unit)
     */
    unit: string;

    /**
     * Converts an instance of  [this class]() to its ArcGIS portal JSON representation.See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html) topic in the Guide for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-BufferParameters.html#toJSON)
     *
     *
     */
    toJSON(): any;
  }

  interface BufferParametersConstructor {
    new (properties?: BufferParametersProperties): BufferParameters;
  }

  export const BufferParameters: BufferParametersConstructor;

  interface BufferParametersProperties {
    /**
     * The spatial reference in which the geometries are buffered.If `bufferSpatialReference` is not specified, the geometries are buffered in the spatialreference specified by `outSpatialReference`. If `outSpatialReference` is also not specified,they are buffered in the spatial reference of the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-BufferParameters.html#bufferSpatialReference)
     */
    bufferSpatialReference?: SpatialReferenceProperties;
    /**
     * The distances the input features are buffered. The distance units are specified by `unit`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-BufferParameters.html#distances)
     */
    distances?: number[];
    /**
     * If the input geometries are in a geographic coordinate system, set geodesic to `true` togenerate a buffer polygon using a geodesic distance. The `bufferSpatialReference` property isignored when geodesic is set to `true`. Requires ArcGIS Server 10.1 or greater geometry service.For more information, see the ArcGIS REST API documentation on the GeometryService bufferoperation and the geodesic property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-BufferParameters.html#geodesic)
     */
    geodesic?: boolean;
    /**
     * The input geometries to buffer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-BufferParameters.html#geometries)
     */
    geometries?: GeometryProperties[];
    /**
     * The spatial reference for the returned geometries.If `outSpatialReference` is not specified, the output geometries are in the spatial referencespecified by `bufferSpatialReference`. If `bufferSpatialReference` also is not specified, theyare in the spatial reference of the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-BufferParameters.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties;
    /**
     * If `true`, all geometries buffered at a given distance are unioned into a single (possiblymultipart) polygon, and the unioned geometry is placed in the output array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-BufferParameters.html#unionResults)
     */
    unionResults?: boolean;
    /**
     * The units for calculating each buffer distance. If `unit` is not specified, the units arederived from `bufferSpatialReference`. If `bufferSpatialReference` is not specified,the units are derived from the features.For a list of valid units, see [esriSRUnitType Constants](http://resources.arcgis.com/en/help/arcobjects-cpp/componenthelp/index.html#/esriSRUnitType_Constants/000w00000042000000/) and [esriSRUnit2Type Constants](http://resources.arcgis.com/en/help/arcobjects-cpp/componenthelp/index.html#/esriSRUnit2Type_Constants/000w00000041000000/).**Possible Values:** feet | kilometers | meters | miles | nautical-miles | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-BufferParameters.html#unit)
     */
    unit?: string;
  }

  interface ClosestFacilityParameters extends Accessor, JSONSupport {
    /**
     * The list of network attribute names to be accumulated with the analysis, i.e., which attributesshould be returned as part of the response.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#accumulateAttributes)
     */
    accumulateAttributes: string[];
    /**
     * An array of attribute parameter values that determine which network elements can be used by a vehicle. Viewthe object specifications below for properties of the individual objects in this array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#attributeParameterValues)
     */
    attributeParameterValues: ClosestFacilityParametersAttributeParameterValues[];
    /**
     * The cutoff value used to determine when to stop traversing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#defaultCutoff)
     */
    defaultCutoff: number;
    /**
     * The number of facilities to find.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#defaultTargetFacilityCount)
     */
    defaultTargetFacilityCount: number;
    /**
     * The language used when generating driving directions. This parameter applies only when [returnDirections](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnDirections)parameter is set to `true`. If an unsupported language code is specified, the service returns the directions using the defaultlanguage, English.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#directionsLanguage)
     */
    directionsLanguage: string;
    /**
     * The length units used when computing driving directions. This parameter applies only when [returnDirections](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnDirections)parameter is set to `true`. If not specified the task will use the value defined by the routing network layer is used.**Possible Values:** centimeters | decimal-degrees | decimeters | feet | inches | kilometers |meters | miles | millimeters | nautical-miles | points | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#directionsLengthUnits)
     */
    directionsLengthUnits:
      | "centimeters"
      | "decimal-degrees"
      | "decimeters"
      | "feet"
      | "inches"
      | "kilometers"
      | "meters"
      | "miles"
      | "millimeters"
      | "nautical-miles"
      | "points"
      | "yards";
    /**
     * Defines the amount of direction information returned. The default value is standard.**Possible Values:** complete | complete-no-events | instructions-only | standard | summary-only
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#directionsOutputType)
     */
    directionsOutputType: "complete" | "complete-no-events" | "instructions-only" | "standard" | "summary-only";
    /**
     * The style to be used when returning directions. The default will be as defined in the network layer.View the REST layer description for your network service to see a list of supported styles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#directionsStyleName)
     */
    directionsStyleName: string;
    /**
     * The name of the attribute field that contains the drive time values. If not specified, the task will usethe attribute field defined by the routing network layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#directionsTimeAttribute)
     */
    directionsTimeAttribute: string;
    /**
     * When `true`, restricted network elements should be considered when finding network locations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#doNotLocateOnRestrictedElements)
     */
    doNotLocateOnRestrictedElements: boolean;
    /**
     * The set of facilities loaded as network locations during analysis. These can be specified as either a[DataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html) or a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html).At ArcGIS Server 10.1 an optional `url` property was added. Use this property to specify a REST query request toa Feature, Map or GP Service that returns a JSON feature set. The url property can be specified using[DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Either the features or url  property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#facilities)
     */
    facilities: DataLayer | FeatureSet;
    /**
     * The network attribute name used as the impedance attribute in analysis.The default is as defined in the routing network layer used in your[RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html). You can specify any attributenames listed in the Service Directory under `Network Dataset > Network Attributes`as `Usage Type: esriNAUTCost`. You can also specify a value of `none` to indicatethat no network attributes should be used for impedance. If youspecify an empty string, it will use the default of the service.For example, set `impedanceAttribute = 'Time'` for quickest route and `impedanceAttribute = 'Length'` forshortest drive, assuming the service has those two esriNAUTCost attributes.View the [Understanding the network attribute](http://desktop.arcgis.com/en/arcmap/latest/extensions/network-analyst/understanding-network-attributes.htm)ArcGIS desktop help topic for more details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#impedanceAttribute)
     */
    impedanceAttribute: string;
    /**
     * The set of incidents loaded as network locations during analysis. Can be an instance of[DataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html) or [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html).At ArcGIS Server 10.1 an optional `url` property was added. Use this property to specify a REST query request to aFeature, Map or GP Service that returns a JSON feature set. The url property can be specified using[DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Either the features or url property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#incidents)
     */
    incidents: DataLayer | FeatureSet;
    /**
     * The output geometry precision. When `0`, no generalization of the output geometry is performed. Positivevalues represent the `MaximumAllowableOffset` parameter used by generalize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#outputGeometryPrecision)
     */
    outputGeometryPrecision: number;
    /**
     * The units of the output geometry precision.**Possible Values:** centimeters | decimal-degrees | decimeters | feet | inches |kilometers | meters | miles | millimeters | nautical-miles | points | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#outputGeometryPrecisionUnits)
     */
    outputGeometryPrecisionUnits:
      | "centimeters"
      | "decimal-degrees"
      | "decimeters"
      | "feet"
      | "inches"
      | "kilometers"
      | "meters"
      | "miles"
      | "millimeters"
      | "nautical-miles"
      | "points"
      | "yards";
    /**
     * The type of output lines to be generated in the result. The default is defined in the specific routingnetwork layer used in your RouteTask.Possible Value | Description---------------|------------none | No lines are returnedstraight | Only returns straight linestrue-shape | Return the true shape of the linestrue-shape-with-measure | Return the true shape of the lines with their measurements
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#outputLines)
     */
    outputLines: "none" | "straight" | "true-shape" | "true-shape-with-measure";
    /**
     * The well-known id of the spatial reference or the spatial reference object for the geometries returnedwith the analysis results. If `outSpatialReference` is not specified, the geometries are returned inthe spatial reference of the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference | string;
    /**
     * The set of point barriers loaded as network locations during analysis. Can be an instance of[DataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html) or [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html).At ArcGIS Server 10.1 an optional `url` property was added. Use this property to specify a REST query request to aFeature, Map or GP Service that returns a JSON feature set. The url property can be specified using[DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Either the features or url property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#pointBarriers)
     */
    pointBarriers: DataLayer | FeatureSet;
    /**
     * The set of polygon barriers loaded as network locations during analysis. Can be an instance of[DataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html) or [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html).At ArcGIS Server 10.1 an optional `url` property was added. Use this property to specify a REST query request to aFeature, Map or GP Service that returns a JSON feature set. The url property can be specified using[DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Either the features or url property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#polygonBarriers)
     */
    polygonBarriers: DataLayer | FeatureSet;
    /**
     * The set of polyline barriers loaded as network locations during analysis. Can be an instance of[DataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html) or [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html).At ArcGIS Server 10.1 an optional `url` property was added. Use this property to specify a REST query request to aFeature, Map or GP Service that returns a JSON feature set. The url property can be specified using[DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Either the features or url property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#polylineBarriers)
     */
    polylineBarriers: DataLayer | FeatureSet;
    /**
     * The list of network attribute names to be used as restrictions with the analysis. The default is as definedin the specific routing network layer used in your RouteTask. Possible values are listed in the Service Directoryunder Network Dataset > Network Attributes. You can also specify a value of none to indicate that no networkattributes should be used as restrictions. If you specify an empty array, it will default to the default of theservice. Use `["none"]` to override the service defaults and specify that no restrictions should be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#restrictionAttributes)
     */
    restrictionAttributes: string[];
    /**
     * Specifies how U-Turns should be handled. The default is as defined in the specific routing network layer usedin your module:"esri/tasks/ClosestFacilityTask".**Possible Values:**  allow-backtrack | at-dead-ends-only |no-backtrack | at-dead-ends-and-intersections
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#restrictUTurns)
     */
    restrictUTurns: "allow-backtrack" | "at-dead-ends-only" | "no-backtrack" | "at-dead-ends-and-intersections";
    /**
     * Indicates whether the service should generate driving directions for each route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnDirections)
     *
     * @default false
     */
    returnDirections: boolean;
    /**
     * If `true`, facilities will be returned with the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnFacilities)
     *
     * @default false
     */
    returnFacilities: boolean;
    /**
     * If `true`, incidents will be returned with the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnIncidents)
     *
     * @default false
     */
    returnIncidents: boolean;
    /**
     * If `true`, point barriers will be returned in the barriers property of the[ClosestFacilitySolveResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnPointBarriers)
     *
     * @default false
     */
    returnPointBarriers: boolean;
    /**
     * If `true`, polygon barriers will be returned in the barriers property of the[ClosestFacilitySolveResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnPolygonBarriers)
     *
     * @default false
     */
    returnPolygonBarriers: boolean;
    /**
     * If `true`, polyline barriers will be returned in the barriers property of the[ClosestFacilitySolveResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnPolylineBarriers)
     *
     * @default false
     */
    returnPolylineBarriers: boolean;
    /**
     * When `true`, closest facility routes will be generated and returned in the route property of each[ClosestFacilitySolveResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnRoutes)
     */
    returnRoutes: boolean;
    /**
     * The arrival or departure date and time. For example, if the travelDirection is set to `to-facility` and`timeOfDayUsage` is set to `end` and `timeOfDay` is set to 8:00 a.m., the returned route(s) will be setup toarrive at the facility at 8:00 a.m. local time. *Requires ArcGIS Server service version 10.1 or greater.*
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#timeOfDay)
     */
    timeOfDay: Date;
    /**
     * Defines the way the `timeOfDay` value is used. The default value is defined in the network layer.*Requires ArcGIS Server service version 10.1 or greater.***Possible Values:** start | end
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#timeOfDayUsage)
     */
    timeOfDayUsage: "start" | "end";
    /**
     * Options for traveling to or from the facility. Default values are defined by the network layer.Possible Value | Description---------------|------------from-facility | Sets travel direction from the facilityto-facility | Sets travel direction to the facility
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#travelDirection)
     */
    travelDirection: "from-facility" | "to-facility";
    /**
     * Travel modes define how a pedestrian, car, truck or other medium of transportation moves through the street network.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#travelMode)
     */
    travelMode: string;
    /**
     * If `true`, the hierarchy attribute for the network will be used in analysis. The default is defined inthe routing network layer used by the [ClosestFacilityTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ClosestFacilityTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#useHierarchy)
     *
     * @default false
     */
    useHierarchy: boolean;
  }

  interface ClosestFacilityParametersConstructor {
    new (properties?: ClosestFacilityParametersProperties): ClosestFacilityParameters;

    fromJSON(json: any): ClosestFacilityParameters;
  }

  export const ClosestFacilityParameters: ClosestFacilityParametersConstructor;

  interface ClosestFacilityParametersProperties {
    /**
     * The list of network attribute names to be accumulated with the analysis, i.e., which attributesshould be returned as part of the response.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#accumulateAttributes)
     */
    accumulateAttributes?: string[];
    /**
     * An array of attribute parameter values that determine which network elements can be used by a vehicle. Viewthe object specifications below for properties of the individual objects in this array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#attributeParameterValues)
     */
    attributeParameterValues?: ClosestFacilityParametersAttributeParameterValues[];
    /**
     * The cutoff value used to determine when to stop traversing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#defaultCutoff)
     */
    defaultCutoff?: number;
    /**
     * The number of facilities to find.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#defaultTargetFacilityCount)
     */
    defaultTargetFacilityCount?: number;
    /**
     * The language used when generating driving directions. This parameter applies only when [returnDirections](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnDirections)parameter is set to `true`. If an unsupported language code is specified, the service returns the directions using the defaultlanguage, English.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#directionsLanguage)
     */
    directionsLanguage?: string;
    /**
     * The length units used when computing driving directions. This parameter applies only when [returnDirections](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnDirections)parameter is set to `true`. If not specified the task will use the value defined by the routing network layer is used.**Possible Values:** centimeters | decimal-degrees | decimeters | feet | inches | kilometers |meters | miles | millimeters | nautical-miles | points | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#directionsLengthUnits)
     */
    directionsLengthUnits?:
      | "centimeters"
      | "decimal-degrees"
      | "decimeters"
      | "feet"
      | "inches"
      | "kilometers"
      | "meters"
      | "miles"
      | "millimeters"
      | "nautical-miles"
      | "points"
      | "yards";
    /**
     * Defines the amount of direction information returned. The default value is standard.**Possible Values:** complete | complete-no-events | instructions-only | standard | summary-only
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#directionsOutputType)
     */
    directionsOutputType?: "complete" | "complete-no-events" | "instructions-only" | "standard" | "summary-only";
    /**
     * The style to be used when returning directions. The default will be as defined in the network layer.View the REST layer description for your network service to see a list of supported styles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#directionsStyleName)
     */
    directionsStyleName?: string;
    /**
     * The name of the attribute field that contains the drive time values. If not specified, the task will usethe attribute field defined by the routing network layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#directionsTimeAttribute)
     */
    directionsTimeAttribute?: string;
    /**
     * When `true`, restricted network elements should be considered when finding network locations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#doNotLocateOnRestrictedElements)
     */
    doNotLocateOnRestrictedElements?: boolean;
    /**
     * The set of facilities loaded as network locations during analysis. These can be specified as either a[DataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html) or a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html).At ArcGIS Server 10.1 an optional `url` property was added. Use this property to specify a REST query request toa Feature, Map or GP Service that returns a JSON feature set. The url property can be specified using[DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Either the features or url  property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#facilities)
     */
    facilities?: DataLayerProperties | FeatureSetProperties;
    /**
     * The network attribute name used as the impedance attribute in analysis.The default is as defined in the routing network layer used in your[RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html). You can specify any attributenames listed in the Service Directory under `Network Dataset > Network Attributes`as `Usage Type: esriNAUTCost`. You can also specify a value of `none` to indicatethat no network attributes should be used for impedance. If youspecify an empty string, it will use the default of the service.For example, set `impedanceAttribute = 'Time'` for quickest route and `impedanceAttribute = 'Length'` forshortest drive, assuming the service has those two esriNAUTCost attributes.View the [Understanding the network attribute](http://desktop.arcgis.com/en/arcmap/latest/extensions/network-analyst/understanding-network-attributes.htm)ArcGIS desktop help topic for more details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#impedanceAttribute)
     */
    impedanceAttribute?: string;
    /**
     * The set of incidents loaded as network locations during analysis. Can be an instance of[DataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html) or [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html).At ArcGIS Server 10.1 an optional `url` property was added. Use this property to specify a REST query request to aFeature, Map or GP Service that returns a JSON feature set. The url property can be specified using[DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Either the features or url property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#incidents)
     */
    incidents?: DataLayerProperties | FeatureSetProperties;
    /**
     * The output geometry precision. When `0`, no generalization of the output geometry is performed. Positivevalues represent the `MaximumAllowableOffset` parameter used by generalize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#outputGeometryPrecision)
     */
    outputGeometryPrecision?: number;
    /**
     * The units of the output geometry precision.**Possible Values:** centimeters | decimal-degrees | decimeters | feet | inches |kilometers | meters | miles | millimeters | nautical-miles | points | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#outputGeometryPrecisionUnits)
     */
    outputGeometryPrecisionUnits?:
      | "centimeters"
      | "decimal-degrees"
      | "decimeters"
      | "feet"
      | "inches"
      | "kilometers"
      | "meters"
      | "miles"
      | "millimeters"
      | "nautical-miles"
      | "points"
      | "yards";
    /**
     * The type of output lines to be generated in the result. The default is defined in the specific routingnetwork layer used in your RouteTask.Possible Value | Description---------------|------------none | No lines are returnedstraight | Only returns straight linestrue-shape | Return the true shape of the linestrue-shape-with-measure | Return the true shape of the lines with their measurements
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#outputLines)
     */
    outputLines?: "none" | "straight" | "true-shape" | "true-shape-with-measure";
    /**
     * The well-known id of the spatial reference or the spatial reference object for the geometries returnedwith the analysis results. If `outSpatialReference` is not specified, the geometries are returned inthe spatial reference of the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties | string;
    /**
     * The set of point barriers loaded as network locations during analysis. Can be an instance of[DataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html) or [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html).At ArcGIS Server 10.1 an optional `url` property was added. Use this property to specify a REST query request to aFeature, Map or GP Service that returns a JSON feature set. The url property can be specified using[DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Either the features or url property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#pointBarriers)
     */
    pointBarriers?: DataLayerProperties | FeatureSetProperties;
    /**
     * The set of polygon barriers loaded as network locations during analysis. Can be an instance of[DataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html) or [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html).At ArcGIS Server 10.1 an optional `url` property was added. Use this property to specify a REST query request to aFeature, Map or GP Service that returns a JSON feature set. The url property can be specified using[DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Either the features or url property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#polygonBarriers)
     */
    polygonBarriers?: DataLayerProperties | FeatureSetProperties;
    /**
     * The set of polyline barriers loaded as network locations during analysis. Can be an instance of[DataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html) or [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html).At ArcGIS Server 10.1 an optional `url` property was added. Use this property to specify a REST query request to aFeature, Map or GP Service that returns a JSON feature set. The url property can be specified using[DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Either the features or url property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#polylineBarriers)
     */
    polylineBarriers?: DataLayerProperties | FeatureSetProperties;
    /**
     * The list of network attribute names to be used as restrictions with the analysis. The default is as definedin the specific routing network layer used in your RouteTask. Possible values are listed in the Service Directoryunder Network Dataset > Network Attributes. You can also specify a value of none to indicate that no networkattributes should be used as restrictions. If you specify an empty array, it will default to the default of theservice. Use `["none"]` to override the service defaults and specify that no restrictions should be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#restrictionAttributes)
     */
    restrictionAttributes?: string[];
    /**
     * Specifies how U-Turns should be handled. The default is as defined in the specific routing network layer usedin your module:"esri/tasks/ClosestFacilityTask".**Possible Values:**  allow-backtrack | at-dead-ends-only |no-backtrack | at-dead-ends-and-intersections
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#restrictUTurns)
     */
    restrictUTurns?: "allow-backtrack" | "at-dead-ends-only" | "no-backtrack" | "at-dead-ends-and-intersections";
    /**
     * Indicates whether the service should generate driving directions for each route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnDirections)
     *
     * @default false
     */
    returnDirections?: boolean;
    /**
     * If `true`, facilities will be returned with the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnFacilities)
     *
     * @default false
     */
    returnFacilities?: boolean;
    /**
     * If `true`, incidents will be returned with the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnIncidents)
     *
     * @default false
     */
    returnIncidents?: boolean;
    /**
     * If `true`, point barriers will be returned in the barriers property of the[ClosestFacilitySolveResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnPointBarriers)
     *
     * @default false
     */
    returnPointBarriers?: boolean;
    /**
     * If `true`, polygon barriers will be returned in the barriers property of the[ClosestFacilitySolveResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnPolygonBarriers)
     *
     * @default false
     */
    returnPolygonBarriers?: boolean;
    /**
     * If `true`, polyline barriers will be returned in the barriers property of the[ClosestFacilitySolveResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnPolylineBarriers)
     *
     * @default false
     */
    returnPolylineBarriers?: boolean;
    /**
     * When `true`, closest facility routes will be generated and returned in the route property of each[ClosestFacilitySolveResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnRoutes)
     */
    returnRoutes?: boolean;
    /**
     * The arrival or departure date and time. For example, if the travelDirection is set to `to-facility` and`timeOfDayUsage` is set to `end` and `timeOfDay` is set to 8:00 a.m., the returned route(s) will be setup toarrive at the facility at 8:00 a.m. local time. *Requires ArcGIS Server service version 10.1 or greater.*
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#timeOfDay)
     */
    timeOfDay?: DateProperties;
    /**
     * Defines the way the `timeOfDay` value is used. The default value is defined in the network layer.*Requires ArcGIS Server service version 10.1 or greater.***Possible Values:** start | end
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#timeOfDayUsage)
     */
    timeOfDayUsage?: "start" | "end";
    /**
     * Options for traveling to or from the facility. Default values are defined by the network layer.Possible Value | Description---------------|------------from-facility | Sets travel direction from the facilityto-facility | Sets travel direction to the facility
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#travelDirection)
     */
    travelDirection?: "from-facility" | "to-facility";
    /**
     * Travel modes define how a pedestrian, car, truck or other medium of transportation moves through the street network.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#travelMode)
     */
    travelMode?: string;
    /**
     * If `true`, the hierarchy attribute for the network will be used in analysis. The default is defined inthe routing network layer used by the [ClosestFacilityTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ClosestFacilityTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#useHierarchy)
     *
     * @default false
     */
    useHierarchy?: boolean;
  }

  export interface ClosestFacilityParametersAttributeParameterValues extends Object {
    /**
     * The name of the attribute.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#attributeParameterValues)
     */
    attributeName: string;
    /**
     * The parameter name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#attributeParameterValues)
     */
    parameterName: string;
    /**
     * The parameter value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#attributeParameterValues)
     */
    value: string;
  }

  interface ClosestFacilitySolveResult extends Accessor, JSONSupport {
    /**
     * An array of directions. A direction is an instance of[DirectionsFeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html). Route directions are returnedif `returnDirections = true` (default is false).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#directions)
     */
    directions: DirectionsFeatureSet;
    /**
     * An array of points representing facilities. Only returned when `ClosestFacilityParameters.returnFacilities = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#facilities)
     */
    facilities: Point[];
    /**
     * An array of points representing incidents. Only returned when `ClosestFacilityParameters.returnIncidents = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#incidents)
     */
    incidents: Point[];
    /**
     * Message received when the solve is complete. If a closest facility cannot be solved, the message returnedby the server identifies the incident that could not be solved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#messages)
     */
    messages: NAMessage[];
    /**
     * The point barriers are an array of points. They are returned only if `ClosestFacilityParameters.returnPointBarriers`was set to `true` (which is not the default). If you send in the point barriers as a FeatureSet (instead of usingDataLayer), you already have the barriers and might not need to request them back from the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#pointBarriers)
     */
    pointBarriers: Point[];
    /**
     * The polygon barriers are an array of polygons. They are returned only if `ClosestFacilityParameters.returnPolygonBarriers`was set to `true` (which is not the default). If you send in the polygon barriers as a FeatureSet (instead of usingDataLayer), you already have the barriers and might not need to request them back from the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#polygonBarriers)
     */
    polygonBarriers: Polygon[];
    /**
     * The polyline barriers are an array of polylines. They are returned only if `ClosestFacilityParameters.returnPolylineBarriers`was set to `true` (which is not the default). If you send in the polyline barriers as a FeatureSet (instead of usingDataLayer), you already have the barriers and might not need to request them back from the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#polylineBarriers)
     */
    polylineBarriers: Polyline[];
    /**
     * The array of routes. Route graphics are returned if `returnRoutes = true` and `outputLines` does not equal`none`. From version 2.0 to 2.5 the type is an array of Polylines. At version 2.6 thetype is an array of Graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#routes)
     */
    routes: Graphic[];
  }

  interface ClosestFacilitySolveResultConstructor {
    new (properties?: ClosestFacilitySolveResultProperties): ClosestFacilitySolveResult;

    fromJSON(json: any): ClosestFacilitySolveResult;
  }

  export const ClosestFacilitySolveResult: ClosestFacilitySolveResultConstructor;

  interface ClosestFacilitySolveResultProperties {
    /**
     * An array of directions. A direction is an instance of[DirectionsFeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html). Route directions are returnedif `returnDirections = true` (default is false).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#directions)
     */
    directions?: DirectionsFeatureSetProperties;
    /**
     * An array of points representing facilities. Only returned when `ClosestFacilityParameters.returnFacilities = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#facilities)
     */
    facilities?: PointProperties[];
    /**
     * An array of points representing incidents. Only returned when `ClosestFacilityParameters.returnIncidents = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#incidents)
     */
    incidents?: PointProperties[];
    /**
     * Message received when the solve is complete. If a closest facility cannot be solved, the message returnedby the server identifies the incident that could not be solved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#messages)
     */
    messages?: NAMessageProperties[];
    /**
     * The point barriers are an array of points. They are returned only if `ClosestFacilityParameters.returnPointBarriers`was set to `true` (which is not the default). If you send in the point barriers as a FeatureSet (instead of usingDataLayer), you already have the barriers and might not need to request them back from the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#pointBarriers)
     */
    pointBarriers?: PointProperties[];
    /**
     * The polygon barriers are an array of polygons. They are returned only if `ClosestFacilityParameters.returnPolygonBarriers`was set to `true` (which is not the default). If you send in the polygon barriers as a FeatureSet (instead of usingDataLayer), you already have the barriers and might not need to request them back from the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#polygonBarriers)
     */
    polygonBarriers?: PolygonProperties[];
    /**
     * The polyline barriers are an array of polylines. They are returned only if `ClosestFacilityParameters.returnPolylineBarriers`was set to `true` (which is not the default). If you send in the polyline barriers as a FeatureSet (instead of usingDataLayer), you already have the barriers and might not need to request them back from the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#polylineBarriers)
     */
    polylineBarriers?: PolylineProperties[];
    /**
     * The array of routes. Route graphics are returned if `returnRoutes = true` and `outputLines` does not equal`none`. From version 2.0 to 2.5 the type is an array of Polylines. At version 2.6 thetype is an array of Graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#routes)
     */
    routes?: GraphicProperties[];
  }

  interface ColorRamp extends Accessor, JSONSupport {
    /**
     * A string value representing the color ramp type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ColorRamp.html#type)
     */
    readonly type: "algorithmic" | "multipart";
  }

  interface ColorRampConstructor {
    new (properties?: ColorRampProperties): ColorRamp;

    fromJSON(json: any): ColorRamp;
  }

  export const ColorRamp: ColorRampConstructor;

  interface ColorRampProperties {}

  interface DataFile extends Accessor, JSONSupport {
    /**
     * The ID of the uploaded file returned as a result of the upload operation.For ArcGIS Server 10.1 and greater services that support uploads, this classcan be used to specify an uploaded item as input by specifying the itemID.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html#itemId)
     */
    itemId: string;
    /**
     * URL to the location of the data file.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html#url)
     */
    url: string;
  }

  interface DataFileConstructor {
    new (properties?: DataFileProperties): DataFile;

    fromJSON(json: any): DataFile;
  }

  export const DataFile: DataFileConstructor;

  interface DataFileProperties {
    /**
     * The ID of the uploaded file returned as a result of the upload operation.For ArcGIS Server 10.1 and greater services that support uploads, this classcan be used to specify an uploaded item as input by specifying the itemID.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html#itemId)
     */
    itemId?: string;
    /**
     * URL to the location of the data file.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html#url)
     */
    url?: string;
  }

  interface DataLayer extends Accessor, JSONSupport {
    /**
     * The geometry to apply to the spatial filter. The spatial relationship as specified by[spatialRelationship](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html#spatialRelationship) is applied to this geometry while performing the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html#geometry)
     */
    geometry: Geometry;
    /**
     * The name of the data layer in the map service that is being referenced.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html#name)
     */
    name: string;
    /**
     * The spatial relationship to be applied on the input geometry whileperforming the query.Possible Value | Description---------------|------------intersects | Part of a feature from feature class 1 is contained in a feature from feature class 2.contains | Part or all of a feature from feature class 1 is contained within a feature from feature class 2.crosses | The feature from feature class 1 crosses a feature from feature class 2.envelope-intersects | The envelope of feature class 1 intersects with the envelope of feature class 2.index-intersects | The envelope of the query feature class intersects the index entry for the target feature class.overlaps | Features from feature class 1 overlap features in feature class 2.touches | The feature from feature class 1 touches the border of a feature from feature class 2.within | The feature from feature class 1 is completely enclosed by the feature from feature class 2.relation | Allows specification of any relationship defined using the [Shape Comparison Language](http://resources.esri.com/help/9.3/arcgisengine/dotnet/concepts_start.htm#40de6491-9b2d-440d-848b-2609efcd46b1.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html#spatialRelationship)
     */
    spatialRelationship: string;

    type: void;
    /**
     * A where clause for the query. Any legal SQL where clause operating on thefields in the layer is allowed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html#where)
     */
    where: string;
  }

  interface DataLayerConstructor {
    new (properties?: DataLayerProperties): DataLayer;

    fromJSON(json: any): DataLayer;
  }

  export const DataLayer: DataLayerConstructor;

  interface DataLayerProperties {
    /**
     * The geometry to apply to the spatial filter. The spatial relationship as specified by[spatialRelationship](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html#spatialRelationship) is applied to this geometry while performing the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html#geometry)
     */
    geometry?: GeometryProperties;
    /**
     * The name of the data layer in the map service that is being referenced.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html#name)
     */
    name?: string;
    /**
     * The spatial relationship to be applied on the input geometry whileperforming the query.Possible Value | Description---------------|------------intersects | Part of a feature from feature class 1 is contained in a feature from feature class 2.contains | Part or all of a feature from feature class 1 is contained within a feature from feature class 2.crosses | The feature from feature class 1 crosses a feature from feature class 2.envelope-intersects | The envelope of feature class 1 intersects with the envelope of feature class 2.index-intersects | The envelope of the query feature class intersects the index entry for the target feature class.overlaps | Features from feature class 1 overlap features in feature class 2.touches | The feature from feature class 1 touches the border of a feature from feature class 2.within | The feature from feature class 1 is completely enclosed by the feature from feature class 2.relation | Allows specification of any relationship defined using the [Shape Comparison Language](http://resources.esri.com/help/9.3/arcgisengine/dotnet/concepts_start.htm#40de6491-9b2d-440d-848b-2609efcd46b1.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html#spatialRelationship)
     */
    spatialRelationship?: string;

    type?: void;
    /**
     * A where clause for the query. Any legal SQL where clause operating on thefields in the layer is allowed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html#where)
     */
    where?: string;
  }

  interface supportDate extends Accessor, JSONSupport {
    /**
     * Date value returned from server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Date.html#date)
     */
    date: Date;
    /**
     * The format of the date used in the date property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Date.html#format)
     *
     * @default EEE MMM dd HH:mm:ss zzz yyyy
     */
    format: string;
  }

  interface supportDateConstructor {
    new (properties?: supportDateProperties): supportDate;

    fromJSON(json: any): supportDate;
  }

  export const supportDate: supportDateConstructor;

  interface supportDateProperties {
    /**
     * Date value returned from server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Date.html#date)
     */
    date?: DateProperties;
    /**
     * The format of the date used in the date property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Date.html#format)
     *
     * @default EEE MMM dd HH:mm:ss zzz yyyy
     */
    format?: string;
  }

  interface DensifyParameters extends Accessor {
    /**
     * If `true`, Geographic Coordinate System spatial references are used ordensify geodesic will be performed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DensifyParameters.html#geodesic)
     */
    geodesic: boolean;
    /**
     * The array of geometries to be densified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DensifyParameters.html#geometries)
     */
    geometries: Geometry[];
    /**
     * The length unit of `maxSegmentLength`. For a list of valid units, see [esriSRUnitType Constants](http://resources.arcgis.com/en/help/arcobjects-cpp/componenthelp/index.html#/esriSRUnitType_Constants/000w00000042000000/) and [esriSRUnit2Type Constants](http://resources.arcgis.com/en/help/arcobjects-cpp/componenthelp/index.html#/esriSRUnit2Type_Constants/000w00000041000000/).**Possible Values:** feet | kilometers | meters | miles | nautical-miles | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DensifyParameters.html#lengthUnit)
     */
    lengthUnit: string;
    /**
     * All segments longer than `maxSegmentLength` are replaced with sequences of linesno longer than `maxSegmentLength.`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DensifyParameters.html#maxSegmentLength)
     */
    maxSegmentLength: number;

    /**
     * Converts an instance of  [this class]() to its ArcGIS portal JSON representation.See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html) topic in the Guide for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DensifyParameters.html#toJSON)
     *
     *
     */
    toJSON(): any;
  }

  interface DensifyParametersConstructor {
    new (properties?: DensifyParametersProperties): DensifyParameters;
  }

  export const DensifyParameters: DensifyParametersConstructor;

  interface DensifyParametersProperties {
    /**
     * If `true`, Geographic Coordinate System spatial references are used ordensify geodesic will be performed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DensifyParameters.html#geodesic)
     */
    geodesic?: boolean;
    /**
     * The array of geometries to be densified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DensifyParameters.html#geometries)
     */
    geometries?: GeometryProperties[];
    /**
     * The length unit of `maxSegmentLength`. For a list of valid units, see [esriSRUnitType Constants](http://resources.arcgis.com/en/help/arcobjects-cpp/componenthelp/index.html#/esriSRUnitType_Constants/000w00000042000000/) and [esriSRUnit2Type Constants](http://resources.arcgis.com/en/help/arcobjects-cpp/componenthelp/index.html#/esriSRUnit2Type_Constants/000w00000041000000/).**Possible Values:** feet | kilometers | meters | miles | nautical-miles | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DensifyParameters.html#lengthUnit)
     */
    lengthUnit?: string;
    /**
     * All segments longer than `maxSegmentLength` are replaced with sequences of linesno longer than `maxSegmentLength.`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DensifyParameters.html#maxSegmentLength)
     */
    maxSegmentLength?: number;
  }

  interface DirectionsFeatureSet extends FeatureSet, Accessor {
    /**
     * The extent of the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#extent)
     */
    extent: Extent;
    /**
     * A single polyline representing the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#mergedGeometry)
     */
    mergedGeometry: Polyline;
    /**
     * The ID of the route returned from the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#routeId)
     */
    routeId: string;
    /**
     * Name specified in [RouteParameters.stops](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#stops).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#routeName)
     */
    routeName: string;
    /**
     * Lists additional information about the directions depending on the value of[RouteParameters.directionsOutputType](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#directionsOutputType).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#strings)
     */
    strings: any[];
    /**
     * Actual drive time calculated for the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#totalDriveTime)
     */
    totalDriveTime: number;
    /**
     * The length of the route as specified in the units set in[RouteParameters.directionsLengthUnits](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#directionsLengthUnits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#totalLength)
     */
    totalLength: number;
    /**
     * The total time calculated for the route as specified in the units set in[RouteParameters.directionsTimeAttribute](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#directionsTimeAttribute).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#totalTime)
     */
    totalTime: number;
  }

  interface DirectionsFeatureSetConstructor {
    new (properties?: DirectionsFeatureSetProperties): DirectionsFeatureSet;

    fromJSON(json: any): DirectionsFeatureSet;
  }

  export const DirectionsFeatureSet: DirectionsFeatureSetConstructor;

  interface DirectionsFeatureSetProperties extends FeatureSetProperties {
    /**
     * The extent of the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#extent)
     */
    extent?: ExtentProperties;
    /**
     * A single polyline representing the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#mergedGeometry)
     */
    mergedGeometry?: PolylineProperties;
    /**
     * The ID of the route returned from the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#routeId)
     */
    routeId?: string;
    /**
     * Name specified in [RouteParameters.stops](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#stops).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#routeName)
     */
    routeName?: string;
    /**
     * Lists additional information about the directions depending on the value of[RouteParameters.directionsOutputType](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#directionsOutputType).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#strings)
     */
    strings?: any[];
    /**
     * Actual drive time calculated for the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#totalDriveTime)
     */
    totalDriveTime?: number;
    /**
     * The length of the route as specified in the units set in[RouteParameters.directionsLengthUnits](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#directionsLengthUnits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#totalLength)
     */
    totalLength?: number;
    /**
     * The total time calculated for the route as specified in the units set in[RouteParameters.directionsTimeAttribute](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#directionsTimeAttribute).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#totalTime)
     */
    totalTime?: number;
  }

  interface DistanceParameters extends Accessor {
    /**
     * Specifies the units for measuring distance between [geometry1](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#geometry1) and [geometry2](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#geometry2). If the unitis not specified the units are derived from the spatial reference. For a list of valid units, see [esriSRUnitType Constants](http://resources.arcgis.com/en/help/arcobjects-cpp/componenthelp/index.html#/esriSRUnitType_Constants/000w00000042000000/) and [esriSRUnit2Type Constants](http://resources.arcgis.com/en/help/arcobjects-cpp/componenthelp/index.html#/esriSRUnit2Type_Constants/000w00000041000000/).**Possible Values:** feet | kilometers | meters | miles | nautical-miles | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#distanceUnit)
     */
    distanceUnit: string;
    /**
     * When `true`, the geodesic distance between [geometry1](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#geometry1) and [geometry2](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#geometry2) is measured.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#geodesic)
     */
    geodesic: boolean;
    /**
     * The geometry from which the distance is to be measured. The geometry can bea [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html), [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html),[Polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html), or a [Multipoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#geometry1)
     */
    geometry1: Geometry[];
    /**
     * The geometry to which the distance is to be measured. The geometry can bea [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html), [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html),[Polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html), or a [Multipoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#geometry2)
     */
    geometry2: Geometry[];

    /**
     * Converts an instance of  [this class]() to its ArcGIS portal JSON representation.See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html) topic in the Guide for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#toJSON)
     *
     *
     */
    toJSON(): any;
  }

  interface DistanceParametersConstructor {
    new (properties?: DistanceParametersProperties): DistanceParameters;
  }

  export const DistanceParameters: DistanceParametersConstructor;

  interface DistanceParametersProperties {
    /**
     * Specifies the units for measuring distance between [geometry1](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#geometry1) and [geometry2](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#geometry2). If the unitis not specified the units are derived from the spatial reference. For a list of valid units, see [esriSRUnitType Constants](http://resources.arcgis.com/en/help/arcobjects-cpp/componenthelp/index.html#/esriSRUnitType_Constants/000w00000042000000/) and [esriSRUnit2Type Constants](http://resources.arcgis.com/en/help/arcobjects-cpp/componenthelp/index.html#/esriSRUnit2Type_Constants/000w00000041000000/).**Possible Values:** feet | kilometers | meters | miles | nautical-miles | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#distanceUnit)
     */
    distanceUnit?: string;
    /**
     * When `true`, the geodesic distance between [geometry1](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#geometry1) and [geometry2](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#geometry2) is measured.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#geodesic)
     */
    geodesic?: boolean;
    /**
     * The geometry from which the distance is to be measured. The geometry can bea [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html), [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html),[Polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html), or a [Multipoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#geometry1)
     */
    geometry1?: GeometryProperties[];
    /**
     * The geometry to which the distance is to be measured. The geometry can bea [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html), [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html),[Polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html), or a [Multipoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#geometry2)
     */
    geometry2?: GeometryProperties[];
  }

  interface FeatureSet extends Accessor, JSONSupport {
    /**
     * The name of the layer's primary display field. The value of this property matches the name of one of the fields ofthe feature. This is only applicable when the FeatureSet is returned from a task. It is ignored when the FeatureSetis used as input to a geoprocessing task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#displayFieldName)
     */
    displayFieldName: string;
    /**
     * Typically, a layer has a limit on the number of features (i.e., records) returned by the query operation. If `maxRecordCount`is configured for a layer, `exceededTransferLimit` will be `true` if a query matches more than the `maxRecordCount`features. It will be `false` otherwise. Supported by ArcGIS Server version 10.1 and later.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#exceededTransferLimit)
     */
    exceededTransferLimit: boolean;
    /**
     * The array of graphics returned from a task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#features)
     */
    features: Graphic[];
    /**
     * Information about each field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#fields)
     */
    fields: Field[];
    /**
     * The geometry type of features in the FeatureSet. All features's geometry must be of the same type.**Possible Values:** point | multipoint | polyline | polygon | multipatch | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#geometryType)
     */
    geometryType: string;
    /**
     * The [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#geometry) used to query the features. It is useful for getting the buffer geometry generatedwhen querying features by [distance](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#distance)or getting the query geometry projected in the [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outSpatialReference) of the query.The query geometry is returned only for [client-side queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryFeatures)and [hosted feature services](http://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm).The query's [returnQueryGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnQueryGeometry) must be set to `true` andthe layer's [capabilities.query.supportsQueryGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) has to be `true` for the query to returnquery geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#queryGeometry)
     */
    queryGeometry: Geometry;
    /**
     * When a FeatureSet is used as input to Geoprocessor, the spatial reference is set to the map's spatial reference by default.This value can be changed. When a FeatureSet is returned from a task, the value is the result as returned from the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#spatialReference)
     */
    spatialReference: SpatialReference;
  }

  interface FeatureSetConstructor {
    new (properties?: FeatureSetProperties): FeatureSet;

    fromJSON(json: any): FeatureSet;
  }

  export const FeatureSet: FeatureSetConstructor;

  interface FeatureSetProperties {
    /**
     * The name of the layer's primary display field. The value of this property matches the name of one of the fields ofthe feature. This is only applicable when the FeatureSet is returned from a task. It is ignored when the FeatureSetis used as input to a geoprocessing task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#displayFieldName)
     */
    displayFieldName?: string;
    /**
     * Typically, a layer has a limit on the number of features (i.e., records) returned by the query operation. If `maxRecordCount`is configured for a layer, `exceededTransferLimit` will be `true` if a query matches more than the `maxRecordCount`features. It will be `false` otherwise. Supported by ArcGIS Server version 10.1 and later.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#exceededTransferLimit)
     */
    exceededTransferLimit?: boolean;
    /**
     * The array of graphics returned from a task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#features)
     */
    features?: GraphicProperties[];
    /**
     * Information about each field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#fields)
     */
    fields?: FieldProperties[];
    /**
     * The geometry type of features in the FeatureSet. All features's geometry must be of the same type.**Possible Values:** point | multipoint | polyline | polygon | multipatch | mesh
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#geometryType)
     */
    geometryType?: string;
    /**
     * The [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#geometry) used to query the features. It is useful for getting the buffer geometry generatedwhen querying features by [distance](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#distance)or getting the query geometry projected in the [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outSpatialReference) of the query.The query geometry is returned only for [client-side queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryFeatures)and [hosted feature services](http://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm).The query's [returnQueryGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnQueryGeometry) must be set to `true` andthe layer's [capabilities.query.supportsQueryGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) has to be `true` for the query to returnquery geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#queryGeometry)
     */
    queryGeometry?: GeometryProperties;
    /**
     * When a FeatureSet is used as input to Geoprocessor, the spatial reference is set to the map's spatial reference by default.This value can be changed. When a FeatureSet is returned from a task, the value is the result as returned from the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
  }

  interface FindParameters extends Accessor {
    /**
     * Determines whether to look for an exact match of the search text or not. If `true`, searches for a value that containsthe provided [searchText](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#searchText). This is a case-insensitive search. If `false`, searches for an exact match of the [searchText](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#searchText)string. The exact match is case-sensitive.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#contains)
     *
     * @default true
     */
    contains: boolean;
    /**
     * Specify the number of decimal places for the geometries returned by the task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#geometryPrecision)
     */
    geometryPrecision: number;
    /**
     * The layers to perform the find operation on. The layers are specified as a comma-separated list of layer ids.The list of ids is returned in [MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html) layerInfos.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#layerIds)
     */
    layerIds: number[];
    /**
     * The maximum allowable offset used for generalizing geometries returned by the find operation. The offset isin the units of [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#outSpatialReference). If [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#outSpatialReference)is not defined, the spatial reference of the map is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#maxAllowableOffset)
     */
    maxAllowableOffset: number;
    /**
     * The spatial reference of the output geometries. If this is not specified, the output geometries are returnedin the spatial reference of the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference;
    /**
     * If `true`, the output will include the geometry associated with each result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#returnGeometry)
     *
     * @default false
     */
    returnGeometry: boolean;
    /**
     * The names of the fields of a layer to search. The fields are specified as a comma-separated list of field names.If this parameter is not specified, all fields are searched by default.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#searchFields)
     */
    searchFields: string[];
    /**
     * The text that is searched across the layers and the fields as specified in the `layers` and[searchFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#searchFields) properties.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#searchText)
     */
    searchText: string;

    /**
     * Converts an instance of  [this class]() to its ArcGIS portal JSON representation.See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html) topic in the Guide for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#toJSON)
     *
     *
     */
    toJSON(): any;
  }

  interface FindParametersConstructor {
    new (properties?: FindParametersProperties): FindParameters;
  }

  export const FindParameters: FindParametersConstructor;

  interface FindParametersProperties {
    /**
     * Determines whether to look for an exact match of the search text or not. If `true`, searches for a value that containsthe provided [searchText](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#searchText). This is a case-insensitive search. If `false`, searches for an exact match of the [searchText](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#searchText)string. The exact match is case-sensitive.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#contains)
     *
     * @default true
     */
    contains?: boolean;
    /**
     * Specify the number of decimal places for the geometries returned by the task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#geometryPrecision)
     */
    geometryPrecision?: number;
    /**
     * The layers to perform the find operation on. The layers are specified as a comma-separated list of layer ids.The list of ids is returned in [MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html) layerInfos.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#layerIds)
     */
    layerIds?: number[];
    /**
     * The maximum allowable offset used for generalizing geometries returned by the find operation. The offset isin the units of [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#outSpatialReference). If [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#outSpatialReference)is not defined, the spatial reference of the map is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#maxAllowableOffset)
     */
    maxAllowableOffset?: number;
    /**
     * The spatial reference of the output geometries. If this is not specified, the output geometries are returnedin the spatial reference of the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties;
    /**
     * If `true`, the output will include the geometry associated with each result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#returnGeometry)
     *
     * @default false
     */
    returnGeometry?: boolean;
    /**
     * The names of the fields of a layer to search. The fields are specified as a comma-separated list of field names.If this parameter is not specified, all fields are searched by default.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#searchFields)
     */
    searchFields?: string[];
    /**
     * The text that is searched across the layers and the fields as specified in the `layers` and[searchFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#searchFields) properties.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#searchText)
     */
    searchText?: string;
  }

  interface FindResult extends Accessor, JSONSupport {
    /**
     * The name of the layer's primary display field. The value of this property matches the name of one of the fields of the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindResult.html#displayFieldName)
     */
    displayFieldName: string;
    /**
     * The found feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindResult.html#feature)
     */
    feature: Graphic;
    /**
     * The name of the field that contains the search text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindResult.html#foundFieldName)
     */
    foundFieldName: string;
    /**
     * Unique ID of the layer that contains the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindResult.html#layerId)
     */
    layerId: number;
    /**
     * The layer name that contains the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindResult.html#layerName)
     */
    layerName: string;
    /**
     * The value of the `foundFieldName` in the feature's attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindResult.html#value)
     */
    value: void;
  }

  interface FindResultConstructor {
    new (properties?: FindResultProperties): FindResult;

    fromJSON(json: any): FindResult;
  }

  export const FindResult: FindResultConstructor;

  interface FindResultProperties {
    /**
     * The name of the layer's primary display field. The value of this property matches the name of one of the fields of the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindResult.html#displayFieldName)
     */
    displayFieldName?: string;
    /**
     * The found feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindResult.html#feature)
     */
    feature?: GraphicProperties;
    /**
     * The name of the field that contains the search text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindResult.html#foundFieldName)
     */
    foundFieldName?: string;
    /**
     * Unique ID of the layer that contains the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindResult.html#layerId)
     */
    layerId?: number;
    /**
     * The layer name that contains the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindResult.html#layerName)
     */
    layerName?: string;
    /**
     * The value of the `foundFieldName` in the feature's attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindResult.html#value)
     */
    value?: void;
  }

  interface GeneralizeParameters extends Accessor {
    /**
     * The maximum deviation unit. If the unit is not specified, units are derived from thespatial reference.Use one of the possible values listed below or any of the[numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).**Possible Values:** feet | kilometers | meters | miles | nautical-miles | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-GeneralizeParameters.html#deviationUnit)
     */
    deviationUnit: string;
    /**
     * The array of input geometries to generalize. All geometries in this array must be of the samegeometry type (e.g. `esriGeometryPolyline` or `esriGeometryPolygon`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-GeneralizeParameters.html#geometries)
     */
    geometries: Geometry[];
    /**
     * The maximum deviation for constructing a generalized geometry based on the input geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-GeneralizeParameters.html#maxDeviation)
     */
    maxDeviation: number;

    /**
     * Converts an instance of  [this class]() to its ArcGIS portal JSON representation.See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html) topic in the Guide for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-GeneralizeParameters.html#toJSON)
     *
     *
     */
    toJSON(): any;
  }

  interface GeneralizeParametersConstructor {
    new (properties?: GeneralizeParametersProperties): GeneralizeParameters;
  }

  export const GeneralizeParameters: GeneralizeParametersConstructor;

  interface GeneralizeParametersProperties {
    /**
     * The maximum deviation unit. If the unit is not specified, units are derived from thespatial reference.Use one of the possible values listed below or any of the[numeric codes for linear units](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).**Possible Values:** feet | kilometers | meters | miles | nautical-miles | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-GeneralizeParameters.html#deviationUnit)
     */
    deviationUnit?: string;
    /**
     * The array of input geometries to generalize. All geometries in this array must be of the samegeometry type (e.g. `esriGeometryPolyline` or `esriGeometryPolygon`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-GeneralizeParameters.html#geometries)
     */
    geometries?: GeometryProperties[];
    /**
     * The maximum deviation for constructing a generalized geometry based on the input geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-GeneralizeParameters.html#maxDeviation)
     */
    maxDeviation?: number;
  }

  interface GPMessage extends Accessor, JSONSupport {
    /**
     * The geoprocessing message.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-GPMessage.html#description)
     */
    description: string;
    /**
     * The geoprocessing message type.**Possible Values:** informative | process-definition | process-start | process-stop| warning | error | empty | abort
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-GPMessage.html#type)
     */
    type: string;
  }

  interface GPMessageConstructor {
    new (properties?: GPMessageProperties): GPMessage;

    fromJSON(json: any): GPMessage;
  }

  export const GPMessage: GPMessageConstructor;

  interface GPMessageProperties {
    /**
     * The geoprocessing message.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-GPMessage.html#description)
     */
    description?: string;
    /**
     * The geoprocessing message type.**Possible Values:** informative | process-definition | process-start | process-stop| warning | error | empty | abort
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-GPMessage.html#type)
     */
    type?: string;
  }

  interface IdentifyParameters extends Accessor {
    /**
     * Resolution of the current map view in dots per inch.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#dpi)
     *
     * @default 96
     */
    dpi: number;
    /**
     * The geometry used to select features during the Identify operation.The type of the geometry is specified by [Geometry.type](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html#type).The most common geometry used with Identify is a [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#geometry)
     */
    geometry: Geometry;
    /**
     * Specify the number of decimal places for the geometries returned by the task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#geometryPrecision)
     */
    geometryPrecision: number;
    /**
     * Height of the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#height)
     *
     * @default 400
     */
    height: number;
    /**
     * The layers on which to perform the identify operation. The layers are specifiedas a comma-separated list of layer IDs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#layerIds)
     */
    layerIds: number[];
    /**
     * Specifies which layers to use when using Identify.Possible values | Description--------------- | -----------top | Only the top-most visible layer on the service is identified.visible | All visible layers on the service are identified.all | All layers on the service are identified, even if they are not visible. If your service has many layers, a request using this option will not perform well. A visible layer means you can see it in the map at the current extent.  If a layer is turned off or not in range based on its scale dependency settings, it cannot be identified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#layerOption)
     *
     * @default top
     */
    layerOption: string;
    /**
     * The Extent or bounding box of the current map view. The `mapExtent` property is assumed to be in the spatialreference of the map unless [spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#spatialReference) has been specified.The values for [mapExtent](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#mapExtent), [height](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#height), [width](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#width), and [dpi](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#dpi) are usedto determine the current map scale. Once the scale is known, the map service can exclude layers basedon their scale dependency settings. The map service is not performing a spatial intersection based onthe provided extent. These properties are also used to calculate the search distance on the map basedon the tolerance in screen pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#mapExtent)
     */
    mapExtent: Extent;
    /**
     * The maximum allowable offset used for generalizing geometries returned by the identify operation.The offset is in the units of the [spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#spatialReference). If a[spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#spatialReference) is not defined the spatial reference of the view is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#maxAllowableOffset)
     */
    maxAllowableOffset: number;
    /**
     * If `true`, field names will be returned instead of field aliases.Requires ArcGIS Server service 10.5 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#returnFieldName)
     *
     * @default false
     */
    returnFieldName: boolean;
    /**
     * If `true`, the result set includes the geometry associated with each result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#returnGeometry)
     *
     * @default false
     */
    returnGeometry: boolean;
    /**
     * When `true`, indicates that M values will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#returnM)
     *
     * @default false
     */
    returnM: boolean;
    /**
     * If `true`, the values in the result will not be formatted i.e. numbers will returned as is and dateswill be returned as epoch values.Requires ArcGIS Server service 10.5 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#returnUnformattedValues)
     *
     * @default false
     */
    returnUnformattedValues: boolean;
    /**
     * When `true`, indicates that Z values will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#returnZ)
     *
     * @default false
     */
    returnZ: boolean;
    /**
     * The spatial reference of the input and output geometries as well as of the [mapExtent](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#mapExtent).If the spatial reference is not specified, the geometry and the extent are assumed to be in thespatial reference of the view, and the output geometries will also be in the spatial reference of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#spatialReference)
     */
    spatialReference: SpatialReference;
    /**
     * The distance in screen pixels from the specified geometry within which the identify should be performed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#tolerance)
     */
    tolerance: number;
    /**
     * Width of the current map view in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#width)
     *
     * @default 400
     */
    width: number;

    /**
     * Converts an instance of  [this class]() to its ArcGIS portal JSON representation.See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html) topic in the Guide for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#toJSON)
     *
     *
     */
    toJSON(): any;
  }

  interface IdentifyParametersConstructor {
    new (properties?: IdentifyParametersProperties): IdentifyParameters;
  }

  export const IdentifyParameters: IdentifyParametersConstructor;

  interface IdentifyParametersProperties {
    /**
     * Resolution of the current map view in dots per inch.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#dpi)
     *
     * @default 96
     */
    dpi?: number;
    /**
     * The geometry used to select features during the Identify operation.The type of the geometry is specified by [Geometry.type](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html#type).The most common geometry used with Identify is a [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#geometry)
     */
    geometry?: GeometryProperties;
    /**
     * Specify the number of decimal places for the geometries returned by the task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#geometryPrecision)
     */
    geometryPrecision?: number;
    /**
     * Height of the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#height)
     *
     * @default 400
     */
    height?: number;
    /**
     * The layers on which to perform the identify operation. The layers are specifiedas a comma-separated list of layer IDs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#layerIds)
     */
    layerIds?: number[];
    /**
     * Specifies which layers to use when using Identify.Possible values | Description--------------- | -----------top | Only the top-most visible layer on the service is identified.visible | All visible layers on the service are identified.all | All layers on the service are identified, even if they are not visible. If your service has many layers, a request using this option will not perform well. A visible layer means you can see it in the map at the current extent.  If a layer is turned off or not in range based on its scale dependency settings, it cannot be identified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#layerOption)
     *
     * @default top
     */
    layerOption?: string;
    /**
     * The Extent or bounding box of the current map view. The `mapExtent` property is assumed to be in the spatialreference of the map unless [spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#spatialReference) has been specified.The values for [mapExtent](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#mapExtent), [height](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#height), [width](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#width), and [dpi](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#dpi) are usedto determine the current map scale. Once the scale is known, the map service can exclude layers basedon their scale dependency settings. The map service is not performing a spatial intersection based onthe provided extent. These properties are also used to calculate the search distance on the map basedon the tolerance in screen pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#mapExtent)
     */
    mapExtent?: ExtentProperties;
    /**
     * The maximum allowable offset used for generalizing geometries returned by the identify operation.The offset is in the units of the [spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#spatialReference). If a[spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#spatialReference) is not defined the spatial reference of the view is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#maxAllowableOffset)
     */
    maxAllowableOffset?: number;
    /**
     * If `true`, field names will be returned instead of field aliases.Requires ArcGIS Server service 10.5 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#returnFieldName)
     *
     * @default false
     */
    returnFieldName?: boolean;
    /**
     * If `true`, the result set includes the geometry associated with each result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#returnGeometry)
     *
     * @default false
     */
    returnGeometry?: boolean;
    /**
     * When `true`, indicates that M values will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#returnM)
     *
     * @default false
     */
    returnM?: boolean;
    /**
     * If `true`, the values in the result will not be formatted i.e. numbers will returned as is and dateswill be returned as epoch values.Requires ArcGIS Server service 10.5 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#returnUnformattedValues)
     *
     * @default false
     */
    returnUnformattedValues?: boolean;
    /**
     * When `true`, indicates that Z values will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#returnZ)
     *
     * @default false
     */
    returnZ?: boolean;
    /**
     * The spatial reference of the input and output geometries as well as of the [mapExtent](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#mapExtent).If the spatial reference is not specified, the geometry and the extent are assumed to be in thespatial reference of the view, and the output geometries will also be in the spatial reference of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * The distance in screen pixels from the specified geometry within which the identify should be performed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#tolerance)
     */
    tolerance?: number;
    /**
     * Width of the current map view in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#width)
     *
     * @default 400
     */
    width?: number;
  }

  interface IdentifyResult extends Accessor, JSONSupport {
    /**
     * The name of the layer's primary display field. The value of this property matchesthe name of one of the fields of the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyResult.html#displayFieldName)
     */
    displayFieldName: string;
    /**
     * An identified feature from the map service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyResult.html#feature)
     */
    feature: Graphic;
    /**
     * Unique ID of the layer that contains the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyResult.html#layerId)
     */
    layerId: number;
    /**
     * The layer name that contains the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyResult.html#layerName)
     */
    layerName: string;
  }

  interface IdentifyResultConstructor {
    new (properties?: IdentifyResultProperties): IdentifyResult;

    fromJSON(json: any): IdentifyResult;
  }

  export const IdentifyResult: IdentifyResultConstructor;

  interface IdentifyResultProperties {
    /**
     * The name of the layer's primary display field. The value of this property matchesthe name of one of the fields of the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyResult.html#displayFieldName)
     */
    displayFieldName?: string;
    /**
     * An identified feature from the map service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyResult.html#feature)
     */
    feature?: GraphicProperties;
    /**
     * Unique ID of the layer that contains the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyResult.html#layerId)
     */
    layerId?: number;
    /**
     * The layer name that contains the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyResult.html#layerName)
     */
    layerName?: string;
  }

  interface ImageServiceIdentifyParameters extends Accessor, JSONSupport {
    /**
     * Input geometry that defines the location to be identified.The location can be a point or a polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#geometry)
     */
    geometry: Point | Polygon;
    /**
     * Controls the maximum number of returned catalog items, set to 1 to returnthe top most raster only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#maxItemCount)
     */
    maxItemCount: number;
    /**
     * Specifies the mosaic rules defining the image sorting order.When a mosaic rule is not specified, `center` is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#mosaicRule)
     */
    mosaicRule: MosaicRule;
    /**
     * Specifies the pixel level being identified on the x and y axis. Defaultsto the base resolution of the dataset when not specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#pixelSize)
     */
    pixelSize: Point;
    /**
     * The pixel level being identified (or the resolution being looked at) on the x-axis.If not specified, it will default to the base resolution of the dataset.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#pixelSizeX)
     */
    pixelSizeX: number;
    /**
     * The pixel level being identified (or the resolution being looked at) on the y-axis.If not specified, it will default to the base resolution of the dataset.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#pixelSizeY)
     */
    pixelSizeY: number;
    /**
     * Specifies the rendering rule for how the requested image should be rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#renderingRule)
     */
    renderingRule: RasterFunction;
    /**
     * An array the [rendering rules](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#renderingRule) to retrieve multiple processed pixel values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#renderingRules)
     */
    renderingRules: RasterFunction;
    /**
     * If `true`, returns both geometry and attributes of the catalog items.Set to `false` when catalog items are not needed to significantlyimprove identify operation's performance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#returnCatalogItems)
     */
    returnCatalogItems: boolean;
    /**
     * When `true`, each feature in the catalog items includes the geometry.Set to `false` to not display the features on the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#returnGeometry)
     *
     * @default false
     */
    returnGeometry: boolean;
    /**
     * If `true`, the pixel values of all raster catalog items under the requested geometry.Set to `false` when catalog item values are not needed to significantlyimprove identify operation's performance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#returnPixelValues)
     */
    returnPixelValues: boolean;
    /**
     * A time extent for a temporal data against [time-aware imagery layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#timeInfo).For example, it can be used to discover land cover changes by decade.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#timeExtent)
     */
    timeExtent: TimeExtent;
  }

  interface ImageServiceIdentifyParametersConstructor {
    new (properties?: ImageServiceIdentifyParametersProperties): ImageServiceIdentifyParameters;

    fromJSON(json: any): ImageServiceIdentifyParameters;
  }

  export const ImageServiceIdentifyParameters: ImageServiceIdentifyParametersConstructor;

  interface ImageServiceIdentifyParametersProperties {
    /**
     * Input geometry that defines the location to be identified.The location can be a point or a polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#geometry)
     */
    geometry?: PointProperties | PolygonProperties;
    /**
     * Controls the maximum number of returned catalog items, set to 1 to returnthe top most raster only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#maxItemCount)
     */
    maxItemCount?: number;
    /**
     * Specifies the mosaic rules defining the image sorting order.When a mosaic rule is not specified, `center` is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#mosaicRule)
     */
    mosaicRule?: MosaicRuleProperties;
    /**
     * Specifies the pixel level being identified on the x and y axis. Defaultsto the base resolution of the dataset when not specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#pixelSize)
     */
    pixelSize?: PointProperties;
    /**
     * The pixel level being identified (or the resolution being looked at) on the x-axis.If not specified, it will default to the base resolution of the dataset.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#pixelSizeX)
     */
    pixelSizeX?: number;
    /**
     * The pixel level being identified (or the resolution being looked at) on the y-axis.If not specified, it will default to the base resolution of the dataset.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#pixelSizeY)
     */
    pixelSizeY?: number;
    /**
     * Specifies the rendering rule for how the requested image should be rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#renderingRule)
     */
    renderingRule?: RasterFunctionProperties;
    /**
     * An array the [rendering rules](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#renderingRule) to retrieve multiple processed pixel values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#renderingRules)
     */
    renderingRules?: RasterFunctionProperties;
    /**
     * If `true`, returns both geometry and attributes of the catalog items.Set to `false` when catalog items are not needed to significantlyimprove identify operation's performance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#returnCatalogItems)
     */
    returnCatalogItems?: boolean;
    /**
     * When `true`, each feature in the catalog items includes the geometry.Set to `false` to not display the features on the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#returnGeometry)
     *
     * @default false
     */
    returnGeometry?: boolean;
    /**
     * If `true`, the pixel values of all raster catalog items under the requested geometry.Set to `false` when catalog item values are not needed to significantlyimprove identify operation's performance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#returnPixelValues)
     */
    returnPixelValues?: boolean;
    /**
     * A time extent for a temporal data against [time-aware imagery layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#timeInfo).For example, it can be used to discover land cover changes by decade.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#timeExtent)
     */
    timeExtent?: TimeExtentProperties;
  }

  interface ImageServiceIdentifyResult extends Accessor, JSONSupport {
    /**
     * The set of catalog items that overlap the input geometry. CatalogItems are returned only when the image service source is a mosaic dataset.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyResult.html#catalogItems)
     */
    catalogItems: FeatureSet;
    /**
     * The set of visible areas for the identified catalog items.`CatalogItemVisibilities` are returned only when the imageservice source is a mosaic dataset. Each element in the arraycorresponds to the percentage contribution (to final mosaic ingiven extent) of the item in `catalogItems`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyResult.html#catalogItemVisibilities)
     */
    catalogItemVisibilities: number[];
    /**
     * The identified location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyResult.html#location)
     */
    location: Point;
    /**
     * The identify property name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyResult.html#name)
     */
    name: string;
    /**
     * The identify property id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyResult.html#objectId)
     */
    objectId: number;
    /**
     * The attributes of the identified object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyResult.html#properties)
     */
    properties: any;
    /**
     * The identify image service pixel value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyResult.html#value)
     */
    value: string;
  }

  interface ImageServiceIdentifyResultConstructor {
    new (properties?: ImageServiceIdentifyResultProperties): ImageServiceIdentifyResult;

    fromJSON(json: any): ImageServiceIdentifyResult;
  }

  export const ImageServiceIdentifyResult: ImageServiceIdentifyResultConstructor;

  interface ImageServiceIdentifyResultProperties {
    /**
     * The set of catalog items that overlap the input geometry. CatalogItems are returned only when the image service source is a mosaic dataset.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyResult.html#catalogItems)
     */
    catalogItems?: FeatureSetProperties;
    /**
     * The set of visible areas for the identified catalog items.`CatalogItemVisibilities` are returned only when the imageservice source is a mosaic dataset. Each element in the arraycorresponds to the percentage contribution (to final mosaic ingiven extent) of the item in `catalogItems`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyResult.html#catalogItemVisibilities)
     */
    catalogItemVisibilities?: number[];
    /**
     * The identified location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyResult.html#location)
     */
    location?: PointProperties;
    /**
     * The identify property name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyResult.html#name)
     */
    name?: string;
    /**
     * The identify property id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyResult.html#objectId)
     */
    objectId?: number;
    /**
     * The attributes of the identified object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyResult.html#properties)
     */
    properties?: any;
    /**
     * The identify image service pixel value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyResult.html#value)
     */
    value?: string;
  }

  interface JobInfo extends Accessor, JSONSupport {
    /**
     * The unique job ID assigned by ArcGIS Server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-JobInfo.html#jobId)
     */
    jobId: string;
    /**
     * The job status.**Possible Values:** job-cancelled | job-cancelling | job-deleted | job-deleting | job-timed-out |job-executing | job-failed | job-new | job-submitted | job-succeeded | job-waiting
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-JobInfo.html#jobStatus)
     */
    jobStatus: string;
    /**
     * An array of messages that include the message type and a description.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-JobInfo.html#messages)
     */
    messages: GPMessage[];
  }

  interface JobInfoConstructor {
    new (properties?: JobInfoProperties): JobInfo;

    fromJSON(json: any): JobInfo;
  }

  export const JobInfo: JobInfoConstructor;

  interface JobInfoProperties {
    /**
     * The unique job ID assigned by ArcGIS Server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-JobInfo.html#jobId)
     */
    jobId?: string;
    /**
     * The job status.**Possible Values:** job-cancelled | job-cancelling | job-deleted | job-deleting | job-timed-out |job-executing | job-failed | job-new | job-submitted | job-succeeded | job-waiting
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-JobInfo.html#jobStatus)
     */
    jobStatus?: string;
    /**
     * An array of messages that include the message type and a description.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-JobInfo.html#messages)
     */
    messages?: GPMessageProperties[];
  }

  interface LegendLayer extends Accessor {
    /**
     * The id of the operational layer to include in the printout's legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LegendLayer.html#layerId)
     */
    layerId: string;
    /**
     * The ids of the sublayers to include in the printout's legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LegendLayer.html#subLayerIds)
     */
    subLayerIds: string[];
    /**
     * The title of the feature layer. Use this property to modify feature layer namein the legend for the printout.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LegendLayer.html#title)
     */
    title: string;
  }

  interface LegendLayerConstructor {
    new (properties?: LegendLayerProperties): LegendLayer;
  }

  export const LegendLayer: LegendLayerConstructor;

  interface LegendLayerProperties {
    /**
     * The id of the operational layer to include in the printout's legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LegendLayer.html#layerId)
     */
    layerId?: string;
    /**
     * The ids of the sublayers to include in the printout's legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LegendLayer.html#subLayerIds)
     */
    subLayerIds?: string[];
    /**
     * The title of the feature layer. Use this property to modify feature layer namein the legend for the printout.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LegendLayer.html#title)
     */
    title?: string;
  }

  interface LengthsParameters extends Accessor {
    /**
     * Defines the type of calculation for the geometry. The type can be one of the following:Value | Description---------------|---------------planar | Planar measurements use 2D Cartesian mathematics to calculate length. Use this type if the length needs to be calculated in the input spatial reference otherwise use `preserve-shape`.geodesic | Use this type to calculate an area or length using only the vertices of the polygon to define the lines connecting the vertices as geodesic segments independent of the actual shape of the polygon. **Note:** a geodesic segment is the shortest path between two points on an ellipsoid.preserve-shape | Calculate the area or length of the geometry on the surface of the Earth ellipsoid, for geometries defined in a projected or geographic coordinate system. This method preserves the shape of the geometry in its coordinate system which means the true area or length will be calculated for the geometry that is displayed on the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LengthsParameters.html#calculationType)
     */
    calculationType: string;
    /**
     * If polylines are in a geographic coordinate system, then geodesic needs to be set to `true` in order to calculate the ellipsoidalshortest path distance between each pair of the vertices in the polylines. If `lengthUnit` is not specified, the output is returned in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LengthsParameters.html#geodesic)
     */
    geodesic: boolean;
    /**
     * The length unit in which perimeters of polygons will be calculated.For a list of valid units, see [linear unit codes](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LengthsParameters.html#lengthUnit)
     */
    lengthUnit: number | string;
    /**
     * The array of polylines whose lengths are to be computed. The structure ofeach polyline in the array is same as the structure of the JSON polyline objects returned by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LengthsParameters.html#polylines)
     */
    polylines: Polyline[];

    /**
     * Converts an instance of  [this class]() to its ArcGIS portal JSON representation.See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html) topic in the Guide for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LengthsParameters.html#toJSON)
     *
     *
     */
    toJSON(): any;
  }

  interface LengthsParametersConstructor {
    new (properties?: LengthsParametersProperties): LengthsParameters;
  }

  export const LengthsParameters: LengthsParametersConstructor;

  interface LengthsParametersProperties {
    /**
     * Defines the type of calculation for the geometry. The type can be one of the following:Value | Description---------------|---------------planar | Planar measurements use 2D Cartesian mathematics to calculate length. Use this type if the length needs to be calculated in the input spatial reference otherwise use `preserve-shape`.geodesic | Use this type to calculate an area or length using only the vertices of the polygon to define the lines connecting the vertices as geodesic segments independent of the actual shape of the polygon. **Note:** a geodesic segment is the shortest path between two points on an ellipsoid.preserve-shape | Calculate the area or length of the geometry on the surface of the Earth ellipsoid, for geometries defined in a projected or geographic coordinate system. This method preserves the shape of the geometry in its coordinate system which means the true area or length will be calculated for the geometry that is displayed on the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LengthsParameters.html#calculationType)
     */
    calculationType?: string;
    /**
     * If polylines are in a geographic coordinate system, then geodesic needs to be set to `true` in order to calculate the ellipsoidalshortest path distance between each pair of the vertices in the polylines. If `lengthUnit` is not specified, the output is returned in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LengthsParameters.html#geodesic)
     */
    geodesic?: boolean;
    /**
     * The length unit in which perimeters of polygons will be calculated.For a list of valid units, see [linear unit codes](https://developers.arcgis.com/java/api-reference/constant-values.html#com.esri.core.geometry.LinearUnit.Code.CENTIMETER).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LengthsParameters.html#lengthUnit)
     */
    lengthUnit?: number | string;
    /**
     * The array of polylines whose lengths are to be computed. The structure ofeach polyline in the array is same as the structure of the JSON polyline objects returned by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LengthsParameters.html#polylines)
     */
    polylines?: PolylineProperties[];
  }

  interface LinearUnit extends Accessor, JSONSupport {
    /**
     * Specifies the value of the linear distance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LinearUnit.html#distance)
     *
     * @default 0
     */
    distance: number;
    /**
     * Specifies the unit type of the linear distance.**Possible Values:** feet | kilometers | meters | miles | nautical-miles | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LinearUnit.html#units)
     */
    units: string;
  }

  interface LinearUnitConstructor {
    new (properties?: LinearUnitProperties): LinearUnit;

    fromJSON(json: any): LinearUnit;
  }

  export const LinearUnit: LinearUnitConstructor;

  interface LinearUnitProperties {
    /**
     * Specifies the value of the linear distance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LinearUnit.html#distance)
     *
     * @default 0
     */
    distance?: number;
    /**
     * Specifies the unit type of the linear distance.**Possible Values:** feet | kilometers | meters | miles | nautical-miles | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LinearUnit.html#units)
     */
    units?: string;
  }

  interface MultipartColorRamp extends ColorRamp {
    /**
     * Define an array of algorithmic color ramps used to generate the multi part ramp.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-MultipartColorRamp.html#colorRamps)
     */
    colorRamps: AlgorithmicColorRamp[];
    /**
     * A string value representing the color ramp type. This value is always `multipart`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-MultipartColorRamp.html#type)
     *
     * @default multipart
     */
    readonly type: "multipart";

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-MultipartColorRamp.html#clone)
     *
     *
     */
    clone(): MultipartColorRamp;
  }

  interface MultipartColorRampConstructor {
    new (properties?: MultipartColorRampProperties): MultipartColorRamp;

    fromJSON(json: any): MultipartColorRamp;
  }

  export const MultipartColorRamp: MultipartColorRampConstructor;

  interface MultipartColorRampProperties extends ColorRampProperties {
    /**
     * Define an array of algorithmic color ramps used to generate the multi part ramp.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-MultipartColorRamp.html#colorRamps)
     */
    colorRamps?: AlgorithmicColorRampProperties[];
  }

  interface NAMessage extends Accessor, JSONSupport {
    /**
     * A description of the network analyst message.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-NAMessage.html#description)
     */
    description: string;
    /**
     * The network analyst message type.**Possible Values:** informative | process-definition | process-start | process-stop| warning | error | empty | abort
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-NAMessage.html#type)
     */
    type: string;
  }

  interface NAMessageConstructor {
    new (properties?: NAMessageProperties): NAMessage;

    fromJSON(json: any): NAMessage;
  }

  export const NAMessage: NAMessageConstructor;

  interface NAMessageProperties {
    /**
     * A description of the network analyst message.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-NAMessage.html#description)
     */
    description?: string;
    /**
     * The network analyst message type.**Possible Values:** informative | process-definition | process-start | process-stop| warning | error | empty | abort
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-NAMessage.html#type)
     */
    type?: string;
  }

  interface OffsetParameters extends Accessor {
    /**
     * The `bevelRatio` is multiplied by the offset distance and the result determines how far a mitered offset intersection can be locatedbefore it is beveled. When mitered is specified, the value set for `bevelRatio` is ignored and `10` is used internally. If beveled isspecified, `1.1` will be used if no value is set for bevelRatio. The bevelRatio is ignored when `rounded` is specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-OffsetParameters.html#bevelRatio)
     */
    bevelRatio: number;
    /**
     * The array of geometries to be offset.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-OffsetParameters.html#geometries)
     */
    geometries: Geometry[];
    /**
     * Specifies the planar distance for constructing an offset based on the input geometries. If the `offsetDistance` parameter is positive,the constructed offset will be on the right side of the curve. Left side offsets are constructed with negative values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-OffsetParameters.html#offsetDistance)
     */
    offsetDistance: number;
    /**
     * Options that determine how the ends intersect. Set to one of the following options:Possible Value | Description---------------|-------------bevelled | Squares off the corner after a given ratio distance.mitered | Attempts to allow extended offsets to naturally intersect. If the intersection occurs too far from a corner, the corner will be beveled off at a fixed distance.rounded | Rounds the corner between extended offsets.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-OffsetParameters.html#offsetHow)
     */
    offsetHow: string;
    /**
     * The offset distance unit. For a list of valid units see [esriSRUnitType constants](http://resources.esri.com/help/9.3/ArcGISDesktop/ArcObjects/esriGeometry/esriSRUnitType.htm) or [esriSRUnit2Type constants](http://resources.esri.com/help/9.3/ArcGISDesktop/ArcObjects/esriGeometry/esriSRUnit2Type.htm).**Possible Values:** feet | kilometers | meters | miles | nautical-miles | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-OffsetParameters.html#offsetUnit)
     */
    offsetUnit: string;

    /**
     * Converts an instance of  [this class]() to its ArcGIS portal JSON representation.See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html) topic in the Guide for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-OffsetParameters.html#toJSON)
     *
     *
     */
    toJSON(): any;
  }

  interface OffsetParametersConstructor {
    new (properties?: OffsetParametersProperties): OffsetParameters;
  }

  export const OffsetParameters: OffsetParametersConstructor;

  interface OffsetParametersProperties {
    /**
     * The `bevelRatio` is multiplied by the offset distance and the result determines how far a mitered offset intersection can be locatedbefore it is beveled. When mitered is specified, the value set for `bevelRatio` is ignored and `10` is used internally. If beveled isspecified, `1.1` will be used if no value is set for bevelRatio. The bevelRatio is ignored when `rounded` is specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-OffsetParameters.html#bevelRatio)
     */
    bevelRatio?: number;
    /**
     * The array of geometries to be offset.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-OffsetParameters.html#geometries)
     */
    geometries?: GeometryProperties[];
    /**
     * Specifies the planar distance for constructing an offset based on the input geometries. If the `offsetDistance` parameter is positive,the constructed offset will be on the right side of the curve. Left side offsets are constructed with negative values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-OffsetParameters.html#offsetDistance)
     */
    offsetDistance?: number;
    /**
     * Options that determine how the ends intersect. Set to one of the following options:Possible Value | Description---------------|-------------bevelled | Squares off the corner after a given ratio distance.mitered | Attempts to allow extended offsets to naturally intersect. If the intersection occurs too far from a corner, the corner will be beveled off at a fixed distance.rounded | Rounds the corner between extended offsets.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-OffsetParameters.html#offsetHow)
     */
    offsetHow?: string;
    /**
     * The offset distance unit. For a list of valid units see [esriSRUnitType constants](http://resources.esri.com/help/9.3/ArcGISDesktop/ArcObjects/esriGeometry/esriSRUnitType.htm) or [esriSRUnit2Type constants](http://resources.esri.com/help/9.3/ArcGISDesktop/ArcObjects/esriGeometry/esriSRUnit2Type.htm).**Possible Values:** feet | kilometers | meters | miles | nautical-miles | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-OffsetParameters.html#offsetUnit)
     */
    offsetUnit?: string;
  }

  interface ParameterValue extends Accessor, JSONSupport {
    /**
     * Specifies the parameter's data type.**Possible Values:** string | double | long | boolean |date | linear-unit | data-file | raster-data | record-set | raster-data-layer | feature-record-set-layer | multi-value
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ParameterValue.html#dataType)
     */
    dataType: string;
    /**
     * The value of the parameter. The data structure of this value depends on the `dataType`.Data Type | JavaScript Type----------|----------------string | [String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)double | [Number (float)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)long | [Number (int)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)boolean | [Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)date | [Date](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Date.html)linear-unit | [LinearUnit](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LinearUnit.html)data-file | [DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html)raster-data | [RasterData](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RasterData.html)record-set | [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html)raster-data-layer | [RasterData](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RasterData.html)feature-record-set-layer | [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html)multi-value | [String[]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ParameterValue.html#value)
     */
    value: any;
  }

  interface ParameterValueConstructor {
    new (properties?: ParameterValueProperties): ParameterValue;

    fromJSON(json: any): ParameterValue;
  }

  export const ParameterValue: ParameterValueConstructor;

  interface ParameterValueProperties {
    /**
     * Specifies the parameter's data type.**Possible Values:** string | double | long | boolean |date | linear-unit | data-file | raster-data | record-set | raster-data-layer | feature-record-set-layer | multi-value
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ParameterValue.html#dataType)
     */
    dataType?: string;
    /**
     * The value of the parameter. The data structure of this value depends on the `dataType`.Data Type | JavaScript Type----------|----------------string | [String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)double | [Number (float)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)long | [Number (int)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)boolean | [Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)date | [Date](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Date.html)linear-unit | [LinearUnit](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LinearUnit.html)data-file | [DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html)raster-data | [RasterData](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RasterData.html)record-set | [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html)raster-data-layer | [RasterData](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RasterData.html)feature-record-set-layer | [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html)multi-value | [String[]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ParameterValue.html#value)
     */
    value?: any;
  }

  interface PrintParameters extends Accessor {
    /**
     * Additional parameters for the print service. When an arcpy script is published as a customprint service there may be additional parameters associated with the print service.To determine the extra parameters visit the ArcGIS REST Services Directory page for the print service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintParameters.html#extraParameters)
     */
    extraParameters: any;
    /**
     * Specify the output spatial reference for the printout.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintParameters.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference;
    /**
     * Defines the layout template used for the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintParameters.html#template)
     */
    template: PrintTemplate;
    /**
     * The view to print.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintParameters.html#view)
     */
    view: MapView;
  }

  interface PrintParametersConstructor {
    new (properties?: PrintParametersProperties): PrintParameters;
  }

  export const PrintParameters: PrintParametersConstructor;

  interface PrintParametersProperties {
    /**
     * Additional parameters for the print service. When an arcpy script is published as a customprint service there may be additional parameters associated with the print service.To determine the extra parameters visit the ArcGIS REST Services Directory page for the print service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintParameters.html#extraParameters)
     */
    extraParameters?: any;
    /**
     * Specify the output spatial reference for the printout.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintParameters.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties;
    /**
     * Defines the layout template used for the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintParameters.html#template)
     */
    template?: PrintTemplateProperties;
    /**
     * The view to print.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintParameters.html#view)
     */
    view?: MapViewProperties;
  }

  interface PrintTemplate extends Accessor {
    /**
     * When `false`, the attribution is not displayed on the printout.This only applies when the [layout](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#layout) value is `map-only`.Reference our policies on [Licensing & Attribution](https://developers.arcgis.com/javascript/latest/guide/licensing/) for specific attribution requirements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#attributionVisible)
     *
     * @default true
     */
    attributionVisible: boolean;
    /**
     * Define the map width, height and dpi. Required when `layout = 'map-only'`. See the object specificationtable below for available options to set for exportOptions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#exportOptions)
     */
    exportOptions: PrintTemplateExportOptions;
    /**
     * When true, the feature's attributes are included in feature collection layers even when they are not needed forrendering. By default they are removed to reduce the request size. Only applicable to custom print serviceswhich use the feature attributes, for example to display a table of features and their attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#forceFeatureAttributes)
     *
     * @default false
     */
    forceFeatureAttributes: boolean;
    /**
     * The output format for the printed map.**Possible Values:** pdf | png32 | png8 | jpg | gif | eps | svg | svgz
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#format)
     *
     * @default png32
     */
    format: string;
    /**
     * The layout used for the print output. When the value is `map-only` or is empty, the output map does not contain any page layoutsurroundings (for example, title, legend, scale bar and so forth). The print service provides out-of-the-box templates listed in possible values.The server administrator can add additional templates to the print service.Possible values are listed below:Value | Description| --- | ---map-only | Map does not contain any layout elements. Only map image is printed.a3-landscape | A3 Landscapea3-portrait | A3 Portraita4-landscape | A4 Landscapea4-portrait | A4 Portraitletter-ansi-a-landscape | Letter ANSI A Landscapeletter-ansi-a-portrait | Letter ANSI A Portraittabloid-ansi-b-landscape| Tabloid ANSI B Landscapetabloid-ansi-b-portrait | Tabloid ANSI B Portrait
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#layout)
     *
     * @default map-only
     */
    layout: string;
    /**
     * Defines the layout elements. It's an object with the following properties:
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#layoutOptions)
     */
    layoutOptions: PrintTemplateLayoutOptions;
    /**
     * The optional map scale of the printed map. Only applies when `preserveScale = true`. If `outScale` is less than 1, thenthe printed map will use the scale of the input map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#outScale)
     *
     * @default 0
     */
    outScale: number;
    /**
     * Define whether the printed map should preserve map scale or map extent. If `true`, the printed map will use the `outScale`property or default to the scale of the input map. If `false`, the printed map will use the same extent as the input map andthus scale might change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#preserveScale)
     *
     * @default true
     */
    preserveScale: boolean;
    /**
     * When `true`, labels will be shown on the layout.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#showLabels)
     *
     * @default true
     */
    showLabels: boolean;
  }

  interface PrintTemplateConstructor {
    new (properties?: PrintTemplateProperties): PrintTemplate;
  }

  export const PrintTemplate: PrintTemplateConstructor;

  interface PrintTemplateProperties {
    /**
     * When `false`, the attribution is not displayed on the printout.This only applies when the [layout](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#layout) value is `map-only`.Reference our policies on [Licensing & Attribution](https://developers.arcgis.com/javascript/latest/guide/licensing/) for specific attribution requirements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#attributionVisible)
     *
     * @default true
     */
    attributionVisible?: boolean;
    /**
     * Define the map width, height and dpi. Required when `layout = 'map-only'`. See the object specificationtable below for available options to set for exportOptions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#exportOptions)
     */
    exportOptions?: PrintTemplateExportOptions;
    /**
     * When true, the feature's attributes are included in feature collection layers even when they are not needed forrendering. By default they are removed to reduce the request size. Only applicable to custom print serviceswhich use the feature attributes, for example to display a table of features and their attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#forceFeatureAttributes)
     *
     * @default false
     */
    forceFeatureAttributes?: boolean;
    /**
     * The output format for the printed map.**Possible Values:** pdf | png32 | png8 | jpg | gif | eps | svg | svgz
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#format)
     *
     * @default png32
     */
    format?: string;
    /**
     * The layout used for the print output. When the value is `map-only` or is empty, the output map does not contain any page layoutsurroundings (for example, title, legend, scale bar and so forth). The print service provides out-of-the-box templates listed in possible values.The server administrator can add additional templates to the print service.Possible values are listed below:Value | Description| --- | ---map-only | Map does not contain any layout elements. Only map image is printed.a3-landscape | A3 Landscapea3-portrait | A3 Portraita4-landscape | A4 Landscapea4-portrait | A4 Portraitletter-ansi-a-landscape | Letter ANSI A Landscapeletter-ansi-a-portrait | Letter ANSI A Portraittabloid-ansi-b-landscape| Tabloid ANSI B Landscapetabloid-ansi-b-portrait | Tabloid ANSI B Portrait
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#layout)
     *
     * @default map-only
     */
    layout?: string;
    /**
     * Defines the layout elements. It's an object with the following properties:
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#layoutOptions)
     */
    layoutOptions?: PrintTemplateLayoutOptions;
    /**
     * The optional map scale of the printed map. Only applies when `preserveScale = true`. If `outScale` is less than 1, thenthe printed map will use the scale of the input map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#outScale)
     *
     * @default 0
     */
    outScale?: number;
    /**
     * Define whether the printed map should preserve map scale or map extent. If `true`, the printed map will use the `outScale`property or default to the scale of the input map. If `false`, the printed map will use the same extent as the input map andthus scale might change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#preserveScale)
     *
     * @default true
     */
    preserveScale?: boolean;
    /**
     * When `true`, labels will be shown on the layout.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#showLabels)
     *
     * @default true
     */
    showLabels?: boolean;
  }

  export interface PrintTemplateExportOptions extends Object {
    /**
     * Map width. Default value is 800.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#exportOptions)
     */
    width?: number;
    /**
     * Map height. Default value is 1100.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#exportOptions)
     */
    height?: number;
    /**
     * Resolution in dots per inch. If modified when `layout = 'map-only'`,the `width` and `height` will also need to be modified proportional to the `dpi` change. Default value is 96.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#exportOptions)
     */
    dpi?: number;
  }

  export interface PrintTemplateLayoutOptions extends Object {
    /**
     * The text used for the map title if the specified layout contains a title text element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#layoutOptions)
     */
    titleText: string;
    /**
     * The text used for the author if the specified layout contains an author text element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#layoutOptions)
     */
    authorText: string;
    /**
     * The text used for the copyright if the specified layout contains an copyright text element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#layoutOptions)
     */
    copyrightText: string;
    /**
     * The unit used for the scalebar.**Possible Values:** `Miles` | `Kilometers` | `Meters` | `Feet`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#layoutOptions)
     *
     * @default Miles
     */
    scalebarUnit?: string;
    /**
     * An array of [LegendLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LegendLayer.html) containing the id's of the layers thatwill be included in the legend. If `legendLayers` is not specified, all operational layers (non-tiled layers) except [GraphicsLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html)will be present in the legend. To specify that no layers will be included in the legend set `legendLayer = []`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#layoutOptions)
     */
    legendLayers: LegendLayer[];
    /**
     * An array of name-value pairs. Use this property to update the text for custom text elementson the page layout. Values must be strings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#layoutOptions)
     */
    customTextElements: any[];
  }

  interface ProjectParameters extends Accessor {
    /**
     * The input geometries to project.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#geometries)
     */
    geometries: Geometry[];
    /**
     * The spatial reference to which you are projecting the geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference;
    /**
     * The spatial reference to which you are projecting the geometries. Use [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#outSpatialReference) instead.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#outSR)
     */
    outSR: SpatialReference;
    /**
     * The well-known id {wkid:number} or well-known text {wkt:string} of the datumtransformation to be applied to the projected geometries.See [Datum transformations](https://developers.arcgis.com/rest/services-reference/datum-transformations.htm)for a list of valid datum transformations that may be used here.If a transformation is specified, a value must also be specified in the [transformForward](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#transformForward)property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#transformation)
     */
    transformation: ProjectParametersTransformation;
    /**
     * Indicates whether to transform forward or not. The forward or reverse direction of transformation is implied inthe name of the transformation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#transformForward)
     */
    transformForward: boolean;

    /**
     * Converts an instance of  [this class]() to its ArcGIS portal JSON representation.See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html) topic in the Guide for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#toJSON)
     *
     *
     */
    toJSON(): any;
  }

  interface ProjectParametersConstructor {
    new (properties?: ProjectParametersProperties): ProjectParameters;
  }

  export const ProjectParameters: ProjectParametersConstructor;

  interface ProjectParametersProperties {
    /**
     * The input geometries to project.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#geometries)
     */
    geometries?: GeometryProperties[];
    /**
     * The spatial reference to which you are projecting the geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties;
    /**
     * The spatial reference to which you are projecting the geometries. Use [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#outSpatialReference) instead.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#outSR)
     */
    outSR?: SpatialReferenceProperties;
    /**
     * The well-known id {wkid:number} or well-known text {wkt:string} of the datumtransformation to be applied to the projected geometries.See [Datum transformations](https://developers.arcgis.com/rest/services-reference/datum-transformations.htm)for a list of valid datum transformations that may be used here.If a transformation is specified, a value must also be specified in the [transformForward](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#transformForward)property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#transformation)
     */
    transformation?: ProjectParametersTransformation;
    /**
     * Indicates whether to transform forward or not. The forward or reverse direction of transformation is implied inthe name of the transformation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#transformForward)
     */
    transformForward?: boolean;
  }

  export interface ProjectParametersTransformation extends Object {
    /**
     * The well-known ID of the datum transformation to apply to the projection.[List of valid IDs for Datum transformations](https://developers.arcgis.com/rest/services-reference/datum-transformations.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#transformation)
     */
    wkid?: number;
    /**
     * The well-known text that defines a spatial reference. Many browsers have a limit to the length of a GET requestof approximately 2048 characters. When using well-known text to specify the spatial reference you can easily exceedthis limit. In these cases, you will need to [setup and use a proxy page](https://developers.arcgis.com/javascript/latest/guide/proxies/index.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#transformation)
     */
    wkt?: string;
  }

  interface Query extends Accessor, JSONSupport {
    /**
     * Datum transformation used for projecting geometries in the query results when[outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outSpatialReference) is different than the layer's spatial reference.Requires ArcGIS Server service 10.5 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#datumTransformation)
     */
    datumTransformation: number;
    /**
     * Specifies a search distance from a given [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#geometry) in a spatial query.The [units property](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#units) indicates the unit of measurement. In essence, setting this propertycreates a buffer at the specified size around the input [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#geometry). The query will use thatbuffer to return features in the layer or layer view that adhere to the to the indicated [spatial relationship](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#spatialRelationship).If querying a feature service, the [supportsQueryWithDistance](https://developers.arcgis.com/rest/services-reference/query-feature-service-layer-.htm)capability must be `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#distance)
     */
    distance: number;
    /**
     * Specifies the geodatabase version to display for feature service queries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#gdbVersion)
     */
    gdbVersion: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#geometry)
     */
    geometry: Geometry;
    /**
     * Specifies the number of decimal places for geometries returned by the query operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#geometryPrecision)
     */
    geometryPrecision: number;
    /**
     * Used only in [statistical queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#statistic). When one or more field names are provided in this property, the outputstatisics will be grouped based on unique values from those fields. This is only valid when[outStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outStatistics) has been defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#groupByFieldsForStatistics)
     */
    groupByFieldsForStatistics: string[];
    /**
     * A condition used with [outStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outStatistics) and [groupByFieldsForStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#groupByFieldsForStatistics)to limit query results to groups thatsatisfy the aggregation function(s).The following aggregation functions are supported in this clause: `MIN` | `MAX` | `AVG` | `SUM` | `STDDEV` | `COUNT` | `VAR`Aggregation functions used in `having` must be included in the `outStatistics` as well. See the snippet below for an exampleof how this works.For service-based layer queries, this parameter applies only if the [supportsHavingClause](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) property of the layer is `true`.This property is supported on all [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) queries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#having)
     */
    having: string;
    /**
     * The historic moment to query. This parameter applies only if the `supportsQueryWithHistoricMoment`capability of the service being queried is `true`. This setting is provided in the layer resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#historicMoment)
     */
    historicMoment: Date;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#maxAllowableOffset)
     */
    maxAllowableOffset: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#maxRecordCountFactor)
     *
     * @default 1
     */
    maxRecordCountFactor: number;
    /**
     * Parameter dictates how the geometry of a multipatch feature will be returned.Currently, the only supported value is `xyFootprint`. If indicated, the xy footprint of each multipatch geometry will bereturned in the result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#multipatchOption)
     */
    multipatchOption: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#num)
     */
    num: number;
    /**
     * A comma delimited list of ObjectIDs for the features in the layer being queried.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#objectIds)
     */
    objectIds: number[];
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#orderByFields)
     */
    orderByFields: string[];
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outFields)
     */
    outFields: string[];
    /**
     * The spatial reference for the returned geometry. If not specified, the geometry is returned in the spatialreference of the queried layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outStatistics)
     */
    outStatistics: StatisticDefinition[];
    /**
     * Filters features from the layer based on pre-authored parameterized filters.When value is not specified for any parameter in a request, the default value,that is assigned during authoring time, gets used.Requires an ArcGIS Enterprise service 10.5 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#parameterValues)
     */
    parameterValues: QueryParameterValues[];
    /**
     * Specifies the pixel level to be identified on the X and Y axis. Defaults to the base resolution of thedataset if not specified. Applicable only to Image Service layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#pixelSize)
     */
    pixelSize: Symbol;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#quantizationParameters)
     */
    quantizationParameters: QueryQuantizationParameters;
    /**
     * Filters features from the layer that are within the specified range values.Requires ArcGIS Enterprise services 10.5 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#rangeValues)
     */
    rangeValues: QueryRangeValues[];
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#relationParameter)
     */
    relationParameter: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnCentroid)
     *
     * @default false
     */
    returnCentroid: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnDistinctValues)
     *
     * @default false
     */
    returnDistinctValues: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnExceededLimitFeatures)
     *
     * @default true
     */
    returnExceededLimitFeatures: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnGeometry)
     *
     * @default false
     */
    returnGeometry: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnGeometry) is `true`, then m-values are included in the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnM)
     */
    returnM: boolean;
    /**
     * If `true`, the [query geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#queryGeometry) will be returned with the query results.It is useful for getting the buffer geometry generated when querying features by [distance](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#distance)or getting the query geometry projected in the [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outSpatialReference) of the query.The query geometry is returned only for [client-side queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryFeatures)and [hosted feature services](http://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm)and if the layer's [capabilities.query.supportsQueryGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnQueryGeometry)
     *
     * @default false
     */
    returnQueryGeometry: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnGeometry) is `true`, then z-values are included in the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnZ)
     */
    returnZ: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#spatialRelationship)
     *
     * @default intersects
     */
    spatialRelationship: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#sqlFormat)
     *
     * @default none
     */
    sqlFormat: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#start)
     */
    start: number;
    /**
     * Shorthand for a where clause using "like". The field used is the display field defined in the services directory.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#text)
     *
     * @default null
     */
    text: string;
    /**
     * A time extent for a temporal query against [time-aware layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#timeInfo).For example, it can be used to discover all crimes that occurred during thenight shift from 10 PM to 6 AM on a particular date.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#timeExtent)
     */
    timeExtent: TimeExtent;
    /**
     * The unit for calculating the buffer distance when [distance](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#distance) is specified in spatial queries.If `units` is not specified, the unit is derived from the geometry spatial reference.If the geometry spatial reference is not specified, the unit is derived from the feature service data spatial reference.For service-based queries, this parameter only applies if the layer's[capabilities.query.supportsDistance](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) is `true`.**Possible Values:** feet | miles | nautical-miles | us-nautical-miles | meters | kilometers
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#units)
     *
     * @default null
     */
    units: string;
    /**
     * A where clause for the query. Any legal SQL where clause operating on the fields in the layer is allowed.Be sure to have the correct sequence of single and double quotes when writing the where clause in JavaScript.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#where)
     */
    where: string;

    /**
     * Creates a deep clone of Query object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#clone)
     *
     *
     */
    clone(): Query;
  }

  interface QueryConstructor {
    new (properties?: QueryProperties): Query;

    fromJSON(json: any): Query;
  }

  export const Query: QueryConstructor;

  interface QueryProperties {
    /**
     * Datum transformation used for projecting geometries in the query results when[outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outSpatialReference) is different than the layer's spatial reference.Requires ArcGIS Server service 10.5 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#datumTransformation)
     */
    datumTransformation?: number;
    /**
     * Specifies a search distance from a given [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#geometry) in a spatial query.The [units property](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#units) indicates the unit of measurement. In essence, setting this propertycreates a buffer at the specified size around the input [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#geometry). The query will use thatbuffer to return features in the layer or layer view that adhere to the to the indicated [spatial relationship](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#spatialRelationship).If querying a feature service, the [supportsQueryWithDistance](https://developers.arcgis.com/rest/services-reference/query-feature-service-layer-.htm)capability must be `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#distance)
     */
    distance?: number;
    /**
     * Specifies the geodatabase version to display for feature service queries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#gdbVersion)
     */
    gdbVersion?: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#geometry)
     */
    geometry?: GeometryProperties;
    /**
     * Specifies the number of decimal places for geometries returned by the query operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#geometryPrecision)
     */
    geometryPrecision?: number;
    /**
     * Used only in [statistical queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#statistic). When one or more field names are provided in this property, the outputstatisics will be grouped based on unique values from those fields. This is only valid when[outStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outStatistics) has been defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#groupByFieldsForStatistics)
     */
    groupByFieldsForStatistics?: string[];
    /**
     * A condition used with [outStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outStatistics) and [groupByFieldsForStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#groupByFieldsForStatistics)to limit query results to groups thatsatisfy the aggregation function(s).The following aggregation functions are supported in this clause: `MIN` | `MAX` | `AVG` | `SUM` | `STDDEV` | `COUNT` | `VAR`Aggregation functions used in `having` must be included in the `outStatistics` as well. See the snippet below for an exampleof how this works.For service-based layer queries, this parameter applies only if the [supportsHavingClause](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) property of the layer is `true`.This property is supported on all [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) queries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#having)
     */
    having?: string;
    /**
     * The historic moment to query. This parameter applies only if the `supportsQueryWithHistoricMoment`capability of the service being queried is `true`. This setting is provided in the layer resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#historicMoment)
     */
    historicMoment?: DateProperties;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#maxAllowableOffset)
     */
    maxAllowableOffset?: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#maxRecordCountFactor)
     *
     * @default 1
     */
    maxRecordCountFactor?: number;
    /**
     * Parameter dictates how the geometry of a multipatch feature will be returned.Currently, the only supported value is `xyFootprint`. If indicated, the xy footprint of each multipatch geometry will bereturned in the result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#multipatchOption)
     */
    multipatchOption?: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#num)
     */
    num?: number;
    /**
     * A comma delimited list of ObjectIDs for the features in the layer being queried.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#objectIds)
     */
    objectIds?: number[];
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#orderByFields)
     */
    orderByFields?: string[];
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outFields)
     */
    outFields?: string[];
    /**
     * The spatial reference for the returned geometry. If not specified, the geometry is returned in the spatialreference of the queried layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outStatistics)
     */
    outStatistics?: StatisticDefinitionProperties[];
    /**
     * Filters features from the layer based on pre-authored parameterized filters.When value is not specified for any parameter in a request, the default value,that is assigned during authoring time, gets used.Requires an ArcGIS Enterprise service 10.5 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#parameterValues)
     */
    parameterValues?: QueryParameterValues[];
    /**
     * Specifies the pixel level to be identified on the X and Y axis. Defaults to the base resolution of thedataset if not specified. Applicable only to Image Service layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#pixelSize)
     */
    pixelSize?: SymbolProperties;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#quantizationParameters)
     */
    quantizationParameters?: QueryQuantizationParameters;
    /**
     * Filters features from the layer that are within the specified range values.Requires ArcGIS Enterprise services 10.5 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#rangeValues)
     */
    rangeValues?: QueryRangeValues[];
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#relationParameter)
     */
    relationParameter?: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnCentroid)
     *
     * @default false
     */
    returnCentroid?: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnDistinctValues)
     *
     * @default false
     */
    returnDistinctValues?: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnExceededLimitFeatures)
     *
     * @default true
     */
    returnExceededLimitFeatures?: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnGeometry)
     *
     * @default false
     */
    returnGeometry?: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnGeometry) is `true`, then m-values are included in the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnM)
     */
    returnM?: boolean;
    /**
     * If `true`, the [query geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#queryGeometry) will be returned with the query results.It is useful for getting the buffer geometry generated when querying features by [distance](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#distance)or getting the query geometry projected in the [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outSpatialReference) of the query.The query geometry is returned only for [client-side queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryFeatures)and [hosted feature services](http://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm)and if the layer's [capabilities.query.supportsQueryGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnQueryGeometry)
     *
     * @default false
     */
    returnQueryGeometry?: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnGeometry) is `true`, then z-values are included in the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnZ)
     */
    returnZ?: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#spatialRelationship)
     *
     * @default intersects
     */
    spatialRelationship?: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#sqlFormat)
     *
     * @default none
     */
    sqlFormat?: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#start)
     */
    start?: number;
    /**
     * Shorthand for a where clause using "like". The field used is the display field defined in the services directory.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#text)
     *
     * @default null
     */
    text?: string;
    /**
     * A time extent for a temporal query against [time-aware layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#timeInfo).For example, it can be used to discover all crimes that occurred during thenight shift from 10 PM to 6 AM on a particular date.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#timeExtent)
     */
    timeExtent?: TimeExtentProperties;
    /**
     * The unit for calculating the buffer distance when [distance](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#distance) is specified in spatial queries.If `units` is not specified, the unit is derived from the geometry spatial reference.If the geometry spatial reference is not specified, the unit is derived from the feature service data spatial reference.For service-based queries, this parameter only applies if the layer's[capabilities.query.supportsDistance](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) is `true`.**Possible Values:** feet | miles | nautical-miles | us-nautical-miles | meters | kilometers
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#units)
     *
     * @default null
     */
    units?: string;
    /**
     * A where clause for the query. Any legal SQL where clause operating on the fields in the layer is allowed.Be sure to have the correct sequence of single and double quotes when writing the where clause in JavaScript.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#where)
     */
    where?: string;
  }

  export interface QueryParameterValues extends Object {
    /**
     * The parameter name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#parameterValues)
     */
    name: string;
    /**
     * Single value or array of values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#parameterValues)
     */
    value: string | string[] | number | number[] | Date | Date[];
  }

  export interface QueryQuantizationParameters extends Object {
    /**
     * An extent defining the quantization grid bounds. Its[SpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html) matches the input geometry spatial reference if one isspecified for the query. Otherwise, the extent will be in the layer's spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#quantizationParameters)
     */
    extent?: Extent;
    /**
     * Geometry coordinates are optimized for viewing and displaying of data.**Possible Values:** view | edit
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#quantizationParameters)
     */
    mode?: string;
    /**
     * The integer's coordinates will be returnedrelative to the origin position defined by this property value.**Possible Values:** upper-left | lower-left
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#quantizationParameters)
     *
     * @default upper-left
     */
    originPosition?: string;
    /**
     * The size of one pixel in the units of the [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outSpatialReference).This number is used to convert coordinates to integers by building a grid with a resolution matching the tolerance.Each coordinate is then snapped to one pixel on the grid. Consecutive coordinates snapped to the same pixel are removedfor reducing the overall response size. The units of tolerance will match the units of [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outSpatialReference).If `outSpatialReference` is not specified, then tolerance is assumed to be in the units of the spatialreference of the layer. If tolerance is not specified, the [maxAllowableOffset](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#maxAllowableOffset) is used.If tolerance and `maxAllowableOffset` are not specified, a grid of 10,000 * 10,000 grid is used by default.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#quantizationParameters)
     *
     * @default 1
     */
    tolerance?: number;
  }

  export interface QueryRangeValues extends Object {
    /**
     * The range id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#rangeValues)
     */
    name: string;
    /**
     * Single value or value range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#rangeValues)
     */
    values: number | number[];
  }

  interface RasterData extends Accessor, JSONSupport {
    /**
     * Specifies the format of the raster data, such as "jpg", "tif", etc.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RasterData.html#format)
     */
    format: string;
    /**
     * The ID of the uploaded file returned as a result of the upload operation. For ArcGIS Server 10.1 and greater,this class can be used to specify an uploaded item as input by specifying the ItemID.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RasterData.html#itemId)
     */
    itemId: string;
    /**
     * URL to the location of the raster data file.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RasterData.html#url)
     */
    url: string;
  }

  interface RasterDataConstructor {
    new (properties?: RasterDataProperties): RasterData;

    fromJSON(json: any): RasterData;
  }

  export const RasterData: RasterDataConstructor;

  interface RasterDataProperties {
    /**
     * Specifies the format of the raster data, such as "jpg", "tif", etc.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RasterData.html#format)
     */
    format?: string;
    /**
     * The ID of the uploaded file returned as a result of the upload operation. For ArcGIS Server 10.1 and greater,this class can be used to specify an uploaded item as input by specifying the ItemID.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RasterData.html#itemId)
     */
    itemId?: string;
    /**
     * URL to the location of the raster data file.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RasterData.html#url)
     */
    url?: string;
  }

  interface RelationParameters extends Accessor {
    /**
     * The first array of geometries to compute the relation. The structure of each geometry in the array is same as the structureof the json geometry objects returned by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationParameters.html#geometries1)
     */
    geometries1: Geometry[];
    /**
     * The second array of geometries to compute the relation. The structure of each geometry in the array is same as the structureof the json geometry objects returned by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationParameters.html#geometries2)
     */
    geometries2: Geometry[];
    /**
     * The spatial relationship to be tested between the two input geometry arrays. See table below for a list of possible values.If the relation is specified as `relation`, the `relationParameter` parameter describes the spatialrelationship and must be specified.Value | Description------|------------cross | Two polylines cross if they share only points in common, at least one of which is not an endpoint. A polyline and an polygon cross if they share a polyline in common on the interior of the polygon which is not equivalent to the entire polyline. Cross is a Clementini operator. If either one of the geometries is empty, the geometries do not cross.disjoint | Two geometries are disjoint if their intersection is empty. Two geometries intersect if disjoint is "false".in | The base geometry is within the comparison geometry if the base geometry is the intersection of the geometries and the intersection of their interiors is not empty. An empty geometry is within another geometry, unless the other geometry is empty.interior-intersection | Geometries intersect excluding boundary touch.intersection | Geometry interiors intersect or boundaries touch, same as 'not disjoint'.line-coincidence | The boundaries of the geometries must share an intersection, but the relationship between the interiors of the shapes is not considered (they could overlap, one could be contained in the other, or their interiors could be disjoint). This relation applies to polylines and polygons.line-touch | Two geometries are said to touch when the intersection of the geometries is non-empty, but the intersection of their interiors is empty. This evaluates if the touch occurs along a boundary (not a point). Valid for polygons.overlap | Two polylines share a common sub-line, or two polygons share a common sub-area. Two geometries do not overlap if either one is empty.point-touch | Two geometries are said to touch when the intersection of the geometries is non-empty, but the intersection of their interiors is empty. This evaluates if the touch occurs at a point (not a boundary).relation | Allows specification of any relationship defined using the Shape Comparison Language. If this value is used, a value for `relationParameter` must be specified.touch | The union of point touch and line touch. Two geometries are said to touch when the intersection of the geometries is non-empty, but the intersection of their interiors is empty. For example, a point touches a polyline only if the point is coincident with one of the polyline end points. If either one of the two geometries is empty, the geometries are not touched.within | Same as `in` but also allows polylines that are strictly on the boundaries of polygons to be considered in the polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationParameters.html#relation)
     */
    relation: string;
    /**
     * The string describes the spatial relationship to be tested when `RelationParameters.relation = 'relation'`.The [Relational functions for ST_Geometry](https://desktop.arcgis.com/en/arcmap/latest/manage-data/using-sql-with-gdbs/relational-functions-for-st-geometry.htm) topic has additional details.An example of a valid string is: `FFFTTT**`.Also see the description of [geometryEngine.relate()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#relate) foradditional examples of valid strings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationParameters.html#relationParameter)
     */
    relationParameter: string;

    /**
     * Converts an instance of  [this class]() to its ArcGIS portal JSON representation.See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html) topic in the Guide for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationParameters.html#toJSON)
     *
     *
     */
    toJSON(): any;
  }

  interface RelationParametersConstructor {
    new (properties?: RelationParametersProperties): RelationParameters;
  }

  export const RelationParameters: RelationParametersConstructor;

  interface RelationParametersProperties {
    /**
     * The first array of geometries to compute the relation. The structure of each geometry in the array is same as the structureof the json geometry objects returned by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationParameters.html#geometries1)
     */
    geometries1?: GeometryProperties[];
    /**
     * The second array of geometries to compute the relation. The structure of each geometry in the array is same as the structureof the json geometry objects returned by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationParameters.html#geometries2)
     */
    geometries2?: GeometryProperties[];
    /**
     * The spatial relationship to be tested between the two input geometry arrays. See table below for a list of possible values.If the relation is specified as `relation`, the `relationParameter` parameter describes the spatialrelationship and must be specified.Value | Description------|------------cross | Two polylines cross if they share only points in common, at least one of which is not an endpoint. A polyline and an polygon cross if they share a polyline in common on the interior of the polygon which is not equivalent to the entire polyline. Cross is a Clementini operator. If either one of the geometries is empty, the geometries do not cross.disjoint | Two geometries are disjoint if their intersection is empty. Two geometries intersect if disjoint is "false".in | The base geometry is within the comparison geometry if the base geometry is the intersection of the geometries and the intersection of their interiors is not empty. An empty geometry is within another geometry, unless the other geometry is empty.interior-intersection | Geometries intersect excluding boundary touch.intersection | Geometry interiors intersect or boundaries touch, same as 'not disjoint'.line-coincidence | The boundaries of the geometries must share an intersection, but the relationship between the interiors of the shapes is not considered (they could overlap, one could be contained in the other, or their interiors could be disjoint). This relation applies to polylines and polygons.line-touch | Two geometries are said to touch when the intersection of the geometries is non-empty, but the intersection of their interiors is empty. This evaluates if the touch occurs along a boundary (not a point). Valid for polygons.overlap | Two polylines share a common sub-line, or two polygons share a common sub-area. Two geometries do not overlap if either one is empty.point-touch | Two geometries are said to touch when the intersection of the geometries is non-empty, but the intersection of their interiors is empty. This evaluates if the touch occurs at a point (not a boundary).relation | Allows specification of any relationship defined using the Shape Comparison Language. If this value is used, a value for `relationParameter` must be specified.touch | The union of point touch and line touch. Two geometries are said to touch when the intersection of the geometries is non-empty, but the intersection of their interiors is empty. For example, a point touches a polyline only if the point is coincident with one of the polyline end points. If either one of the two geometries is empty, the geometries are not touched.within | Same as `in` but also allows polylines that are strictly on the boundaries of polygons to be considered in the polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationParameters.html#relation)
     */
    relation?: string;
    /**
     * The string describes the spatial relationship to be tested when `RelationParameters.relation = 'relation'`.The [Relational functions for ST_Geometry](https://desktop.arcgis.com/en/arcmap/latest/manage-data/using-sql-with-gdbs/relational-functions-for-st-geometry.htm) topic has additional details.An example of a valid string is: `FFFTTT**`.Also see the description of [geometryEngine.relate()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#relate) foradditional examples of valid strings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationParameters.html#relationParameter)
     */
    relationParameter?: string;
  }

  interface RelationshipQuery extends Accessor, JSONSupport {
    /**
     * Specify the geodatabase version to query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#gdbVersion)
     */
    gdbVersion: string;
    /**
     * Specify the number of decimal places for the geometries returned by the query operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#geometryPrecision)
     */
    geometryPrecision: number;
    /**
     * The historic moment to query. This parameter applies only if the `supportsHistoricMoment`on [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) property of the layer is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#historicMoment)
     */
    historicMoment: Date;
    /**
     * The maximum allowable offset used for generalizing geometries returned by the query operation.The offset is in the units of `outSpatialReference`. If `outSpatialReference` is not defined, the[spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#spatialReference) of the view is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#maxAllowableOffset)
     */
    maxAllowableOffset: number;
    /**
     * An array of objectIds for the features in the layer/table being queried.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#objectIds)
     */
    objectIds: number[];
    /**
     * Attribute fields to include in the FeatureSet. Fields must exist in the map layer. You must list actualfield names rather than the alias names. You are, however, able to use the alias names when you displaythe results.When specifying the output fields, you should limit the fields to only those you expect to use in thequery or the results. The fewer fields you include, the faster the response will be.Each query must have access to the Shape and ObjectId fields for a layer. However, your list of fields doesnot need to include these two fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#outFields)
     */
    outFields: string[];
    /**
     * The spatial reference for the returned geometry. If `outSpatialReference` is not defined, the[spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#spatialReference) of the view is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference;
    /**
     * The ID of the relationship to be queried. The ids for the relationships the table or layer participates in are listed in theArcGIS Services directory.The ID of the relationship to be queried. The relationships that this layer/table participates in are included in the Feature Service Layer resource response. Records in tables/layers corresponding to the related table/layer of the relationship are queried.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#relationshipId)
     */
    relationshipId: number;
    /**
     * If `true`, each feature in the [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html) includes the geometry. Set to `false` (default)if you do not plan to include highlighted features on a map since the geometry makes up a significant portion of the response.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#returnGeometry)
     *
     * @default false
     */
    returnGeometry: boolean;
    /**
     * The definition expression to be applied to the related table or layer. Only records in the list of [objectIds](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#objectIds)that satisfy the definition expression are queried for related records.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#where)
     */
    where: string;

    /**
     * Creates a deep clone of RelationshipQuery object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#clone)
     *
     *
     */
    clone(): RelationshipQuery;
  }

  interface RelationshipQueryConstructor {
    new (properties?: RelationshipQueryProperties): RelationshipQuery;

    fromJSON(json: any): RelationshipQuery;
  }

  export const RelationshipQuery: RelationshipQueryConstructor;

  interface RelationshipQueryProperties {
    /**
     * Specify the geodatabase version to query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#gdbVersion)
     */
    gdbVersion?: string;
    /**
     * Specify the number of decimal places for the geometries returned by the query operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#geometryPrecision)
     */
    geometryPrecision?: number;
    /**
     * The historic moment to query. This parameter applies only if the `supportsHistoricMoment`on [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities) property of the layer is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#historicMoment)
     */
    historicMoment?: DateProperties;
    /**
     * The maximum allowable offset used for generalizing geometries returned by the query operation.The offset is in the units of `outSpatialReference`. If `outSpatialReference` is not defined, the[spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#spatialReference) of the view is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#maxAllowableOffset)
     */
    maxAllowableOffset?: number;
    /**
     * An array of objectIds for the features in the layer/table being queried.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#objectIds)
     */
    objectIds?: number[];
    /**
     * Attribute fields to include in the FeatureSet. Fields must exist in the map layer. You must list actualfield names rather than the alias names. You are, however, able to use the alias names when you displaythe results.When specifying the output fields, you should limit the fields to only those you expect to use in thequery or the results. The fewer fields you include, the faster the response will be.Each query must have access to the Shape and ObjectId fields for a layer. However, your list of fields doesnot need to include these two fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#outFields)
     */
    outFields?: string[];
    /**
     * The spatial reference for the returned geometry. If `outSpatialReference` is not defined, the[spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#spatialReference) of the view is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties;
    /**
     * The ID of the relationship to be queried. The ids for the relationships the table or layer participates in are listed in theArcGIS Services directory.The ID of the relationship to be queried. The relationships that this layer/table participates in are included in the Feature Service Layer resource response. Records in tables/layers corresponding to the related table/layer of the relationship are queried.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#relationshipId)
     */
    relationshipId?: number;
    /**
     * If `true`, each feature in the [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html) includes the geometry. Set to `false` (default)if you do not plan to include highlighted features on a map since the geometry makes up a significant portion of the response.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#returnGeometry)
     *
     * @default false
     */
    returnGeometry?: boolean;
    /**
     * The definition expression to be applied to the related table or layer. Only records in the list of [objectIds](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#objectIds)that satisfy the definition expression are queried for related records.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#where)
     */
    where?: string;
  }

  interface RouteParameters extends Accessor, JSONSupport {
    /**
     * The list of network attribute names to be accumulated with the analysis. For example,which attributes should be returned as part of the response.The default is as defined in the specific routing network layer used in your [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html). You can specifyany attribute names listed in the Service Directory under `Network Dataset -> Network Attributes` as `Usage Type: esriNAUTCost`. See also[Understanding the network attribute](http://resources.arcgis.com/en/help/main/10.2/index.html#//00470000000m000000).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#accumulateAttributes)
     */
    accumulateAttributes: string[];
    /**
     * Each element in the array is an object that describes the parameter values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#attributeParameterValues)
     */
    attributeParameterValues: AttributeParamValue[];
    /**
     * The set of point barriers loaded as network locations during analysis. At ArcGIS Server 10.1an optional url property was added. Use this property to specify a REST query request to a Feature,Map or GP Service that returns a JSON feature set. The url propertycan be specified using [DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html).Note that either the features or url property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#barriers)
     */
    barriers: DataLayer | FeatureSet;
    /**
     * The language used when computing directions. The default is as defined in thespecific routing network layer used in your [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html).By default, NAServer gets installed with `en_US` only - it is up to the server administratorto add additional languages.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#directionsLanguage)
     */
    directionsLanguage: string;
    /**
     * The length units to use when computing directions. The default is as defined in the specificrouting network layer used in your [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html).**Possible Values:** centimeters | decimal-degrees | decimeters | feet | inches | kilometers |meters | miles | millimeters | nautical-miles | points | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#directionsLengthUnits)
     */
    directionsLengthUnits:
      | "centimeters"
      | "decimal-degrees"
      | "decimeters"
      | "feet"
      | "inches"
      | "kilometers"
      | "meters"
      | "miles"
      | "millimeters"
      | "nautical-miles"
      | "points"
      | "yards";
    /**
     * Defines the amount of direction information returned.**Possible Values:** complete | complete-no-events | instructions-only | standard | summary-only
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#directionsOutputType)
     */
    directionsOutputType: "complete" | "complete-no-events" | "instructions-only" | "standard" | "summary-only";
    /**
     * The style to be used when returning directions. The default will be as defined in thenetwork layer. View the REST layer description for your network service to see a listof supported styles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#directionsStyleName)
     */
    directionsStyleName: string;
    /**
     * The name of network attribute to use for the drive time when computing directions.The default is as defined in the specific routing network layer used in your[RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#directionsTimeAttribute)
     */
    directionsTimeAttribute: string;
    /**
     * If `true`, avoids network elements restricted by barriers or restrictionsspecified in [restrictionAttributes](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#restrictionAttributes).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#doNotLocateOnRestrictedElements)
     */
    doNotLocateOnRestrictedElements: boolean;
    /**
     * The [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html) can help you find the most efficient path forvisiting a given list of stops. This is sometimes known as the "traveling salesperson" problem.When the `findBestSequence = true`, the route solver is solving the Traveling Salespersonproblem by computing the optimal sequence to visit the stops. As this is a combinatorialproblem, we employ heuristics to solve this in a reasonable time. The heuristics do notguarantee the optimal sequence (as there is no good/fast way to prove optimality for largenumber of stops). It returns a solution that is close to optimal if not the optimal.The heuristic performs favorably when tested with known TSP benchmarks available in the ORresearch community. For these stops to be visited in the most efficient way, specify thefollowing parameters:```jsrouteParams.findBestSequence = true;routeParams.preserveFirstStop = false;routeParams.preserveLastStop = false;routeParams.returnStops = true;```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#findBestSequence)
     */
    findBestSequence: boolean;
    /**
     * In routes where a stop is not located on a network or a stop could not be reached, the resultswill differ depending on the value of this property:* When `false`, the solve operation will fail if at least one of the stops specified cannot be located or reached.* When `true`, as long as there are at least two valid stops that have been connected by a route, a valid result is returned.If multiple routes are processed in a single request, as long as least one route is built, a valid result is returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#ignoreInvalidLocations)
     */
    ignoreInvalidLocations: boolean;
    /**
     * The network attribute name to be used as the impedance attribute in the analysis. Thedefault is as defined in the specific routing network layer used in your[RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html). You can specify any attribute names listed in theService Directory under `Network Dataset -> Network Attributes` as `Usage Type: esriNAUTCost`.You can also specify a value of `none` to indicate that no network attributes shouldbe used for impedance. If you specify an empty array, it will default to the default of the service.For example, set `impedanceAttribute = "Time"` for the quickest route and`impedanceAttribute = "Length"` for shortest drive, assuming the service hasthose two esriNAUTCost attributes.For more information, see [Understanding the network attribute](http://desktop.arcgis.com/en/arcmap/latest/extensions/network-analyst/understanding-network-attributes.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#impedanceAttribute)
     */
    impedanceAttribute: string;
    /**
     * The precision of the output geometry after generalization. If `0`, no generalizationof output geometry is performed. If present and positive, it represents the `MaximumAllowableOffset`parameter and generalization is performed according to `IPolycurve.Generalize`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#outputGeometryPrecision)
     */
    outputGeometryPrecision: number;
    /**
     * The units of the output geometry precision.**Possible Values:** centimeters | decimal-degrees | decimeters | feet | inches |kilometers | meters | miles | millimeters | nautical-miles | points | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#outputGeometryPrecisionUnits)
     */
    outputGeometryPrecisionUnits:
      | "centimeters"
      | "decimal-degrees"
      | "decimeters"
      | "feet"
      | "inches"
      | "kilometers"
      | "meters"
      | "miles"
      | "millimeters"
      | "nautical-miles"
      | "points"
      | "yards";
    /**
     * The type of output lines to be generated in the result. The default is as definedin the specific routing network layer used in your [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html).Possible Value | Description---------------|------------none | No lines are returnedstraight | Only returns straight linestrue-shape | Return the true shape of the linestrue-shape-with-measure | Return the true shape of the lines with their measurements
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#outputLines)
     */
    outputLines: "none" | "straight" | "true-shape" | "true-shape-with-measure";
    /**
     * The well-known ID of the spatial reference for the geometries returned with the analysis results.If not specified, the geometries are returned in the spatial reference of the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference | string;
    /**
     * The set of point barriers loaded as network locations during analysis. At ArcGIS Server 10.1an optional url property was added. Use this property to specify a REST query request to a Feature,Map or GP Service that returns a JSON feature set. The url propertycan be specified using [DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html).Note that either the features or url property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#pointBarriers)
     */
    pointBarriers: DataLayer | FeatureSet;
    /**
     * The set of polygon barriers loaded as network locations during analysis. At ArcGIS Server 10.1,an optional `url` property was added. Use this property to specify a REST query request to a Feature,Map or GP Service that returns a JSON feature set. The url property can bespecified using [DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Note that either the `features` or`url` property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#polygonBarriers)
     */
    polygonBarriers: DataLayer | FeatureSet;
    /**
     * The set of polyline barriers loaded as network locations during analysis. At ArcGIS Server 10.1,an optional `url` property was added. Use this property to specify a REST query request to a Feature,Map or GP Service that returns a JSON feature set. The url property can bespecified using [DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Note that either the `features` or`url` property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#polylineBarriers)
     */
    polylineBarriers: DataLayer | FeatureSet;
    /**
     * If `true`, keeps the first stop fixed in the sequence even when `findBestSequence = true`.Only applicable if `findBestSequence = true`. The default is as defined in the specific routingnetwork layer used in your [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#preserveFirstStop)
     */
    preserveFirstStop: boolean;
    /**
     * If `true`, keeps the last stop fixed in the sequence even when `findBestSequence = true`.Only applicable if `findBestSequence = true`. The default is as defined in the specificrouting network layer used in your [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#preserveLastStop)
     */
    preserveLastStop: boolean;
    /**
     * The list of network attribute names to be used as restrictions with the analysis.The default is as defined in the specific routing network layer used in your[RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html). Possible values are listed in the Service Directory under`Network Dataset -> Network Attributes`. You can also specify a value of `none` to indicate thatno network attributes should be used as restrictions. If you specify an empty array,it will default to the default of the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#restrictionAttributes)
     */
    restrictionAttributes: string[];
    /**
     * Specifies how U-Turns should be handled. The default is as defined in the specificrouting network layer used in your [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html).**Possible Values:**  allow-backtrack | at-dead-ends-only |no-backtrack | at-dead-ends-and-intersections
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#restrictUTurns)
     */
    restrictUTurns: "allow-backtrack" | "at-dead-ends-only" | "no-backtrack" | "at-dead-ends-and-intersections";
    /**
     * If `true`, barriers are returned with the [RouteResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#returnBarriers)
     *
     * @default false
     */
    returnBarriers: boolean;
    /**
     * Indicates whether the service should generate driving directions for each route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#returnDirections)
     *
     * @default false
     */
    returnDirections: boolean;
    /**
     * If `true`, polygon barriers are returned in the [RouteResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#returnPolygonBarriers)
     *
     * @default false
     */
    returnPolygonBarriers: boolean;
    /**
     * If `true`, polyline barriers are returned in the [RouteResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#returnPolylineBarriers)
     *
     * @default false
     */
    returnPolylineBarriers: boolean;
    /**
     * If `true`, routes are generated and returned in the route property of each [RouteResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#returnRoutes)
     */
    returnRoutes: boolean;
    /**
     * If `true`, stops are returned in the stops property of each [RouteResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#returnStops)
     */
    returnStops: boolean;
    /**
     * If `true`, `z` values are returned in the [RouteResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#returnZ)
     */
    returnZ: boolean;
    /**
     * The time the route begins. If not specified, the default is the time specified in the route service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#startTime)
     */
    startTime: Date;
    /**
     * If `true`, the start time will be in UTC format.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#startTimeIsUTC)
     */
    startTimeIsUTC: boolean;
    /**
     * The set of stops loaded as network locations during analysis. When `stops` takes a FeatureSet,each feature in the FeatureSet must have a defined spatial reference. If the feature contains`x` and `y` attributes, those values are used for the stop, even if the feature includes geometry.At ArcGIS Server 10.1 an optional `url` property was added. Use this property to specify a RESTquery request to a Feature, Map or GP Service that returns a JSON feature set. The `url` propertycan be specified using DataFile Note that either the features or url property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#stops)
     */
    stops: DataLayer | FeatureSet;
    /**
     * Travel modes define how a pedestrian, car, truck or other medium of transportation moves through the street network.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#travelMode)
     */
    travelMode: string;
    /**
     * If `true`, the hierarchy attribute for the network should be used in analysis. The default isas defined in the specific routing network layer used in your [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#useHierarchy)
     *
     * @default false
     */
    useHierarchy: boolean;
    /**
     * A useful feature of the [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html) is the ability to constrain stop visitsto certain times of day, or "time windows". If you were required to deliver orders to four homes andeach customer was available during a limited time period during the day, the route task could help youfind the most efficient path for making all the deliveries.Time windows are treated as a "soft" constraint. This means that although the solver attempts to honortime windows, if necessary, it will violate the time windows of some stops in order to reach them.Remember, the stops will be visited in the order they were added unless you set `RouteParameters.findBestSequence = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#useTimeWindows)
     *
     * @default false
     */
    useTimeWindows: boolean;
  }

  interface RouteParametersConstructor {
    new (properties?: RouteParametersProperties): RouteParameters;

    fromJSON(json: any): RouteParameters;
  }

  export const RouteParameters: RouteParametersConstructor;

  interface RouteParametersProperties {
    /**
     * The list of network attribute names to be accumulated with the analysis. For example,which attributes should be returned as part of the response.The default is as defined in the specific routing network layer used in your [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html). You can specifyany attribute names listed in the Service Directory under `Network Dataset -> Network Attributes` as `Usage Type: esriNAUTCost`. See also[Understanding the network attribute](http://resources.arcgis.com/en/help/main/10.2/index.html#//00470000000m000000).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#accumulateAttributes)
     */
    accumulateAttributes?: string[];
    /**
     * Each element in the array is an object that describes the parameter values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#attributeParameterValues)
     */
    attributeParameterValues?: AttributeParamValue[];
    /**
     * The set of point barriers loaded as network locations during analysis. At ArcGIS Server 10.1an optional url property was added. Use this property to specify a REST query request to a Feature,Map or GP Service that returns a JSON feature set. The url propertycan be specified using [DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html).Note that either the features or url property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#barriers)
     */
    barriers?: DataLayerProperties | FeatureSetProperties;
    /**
     * The language used when computing directions. The default is as defined in thespecific routing network layer used in your [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html).By default, NAServer gets installed with `en_US` only - it is up to the server administratorto add additional languages.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#directionsLanguage)
     */
    directionsLanguage?: string;
    /**
     * The length units to use when computing directions. The default is as defined in the specificrouting network layer used in your [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html).**Possible Values:** centimeters | decimal-degrees | decimeters | feet | inches | kilometers |meters | miles | millimeters | nautical-miles | points | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#directionsLengthUnits)
     */
    directionsLengthUnits?:
      | "centimeters"
      | "decimal-degrees"
      | "decimeters"
      | "feet"
      | "inches"
      | "kilometers"
      | "meters"
      | "miles"
      | "millimeters"
      | "nautical-miles"
      | "points"
      | "yards";
    /**
     * Defines the amount of direction information returned.**Possible Values:** complete | complete-no-events | instructions-only | standard | summary-only
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#directionsOutputType)
     */
    directionsOutputType?: "complete" | "complete-no-events" | "instructions-only" | "standard" | "summary-only";
    /**
     * The style to be used when returning directions. The default will be as defined in thenetwork layer. View the REST layer description for your network service to see a listof supported styles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#directionsStyleName)
     */
    directionsStyleName?: string;
    /**
     * The name of network attribute to use for the drive time when computing directions.The default is as defined in the specific routing network layer used in your[RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#directionsTimeAttribute)
     */
    directionsTimeAttribute?: string;
    /**
     * If `true`, avoids network elements restricted by barriers or restrictionsspecified in [restrictionAttributes](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#restrictionAttributes).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#doNotLocateOnRestrictedElements)
     */
    doNotLocateOnRestrictedElements?: boolean;
    /**
     * The [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html) can help you find the most efficient path forvisiting a given list of stops. This is sometimes known as the "traveling salesperson" problem.When the `findBestSequence = true`, the route solver is solving the Traveling Salespersonproblem by computing the optimal sequence to visit the stops. As this is a combinatorialproblem, we employ heuristics to solve this in a reasonable time. The heuristics do notguarantee the optimal sequence (as there is no good/fast way to prove optimality for largenumber of stops). It returns a solution that is close to optimal if not the optimal.The heuristic performs favorably when tested with known TSP benchmarks available in the ORresearch community. For these stops to be visited in the most efficient way, specify thefollowing parameters:```jsrouteParams.findBestSequence = true;routeParams.preserveFirstStop = false;routeParams.preserveLastStop = false;routeParams.returnStops = true;```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#findBestSequence)
     */
    findBestSequence?: boolean;
    /**
     * In routes where a stop is not located on a network or a stop could not be reached, the resultswill differ depending on the value of this property:* When `false`, the solve operation will fail if at least one of the stops specified cannot be located or reached.* When `true`, as long as there are at least two valid stops that have been connected by a route, a valid result is returned.If multiple routes are processed in a single request, as long as least one route is built, a valid result is returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#ignoreInvalidLocations)
     */
    ignoreInvalidLocations?: boolean;
    /**
     * The network attribute name to be used as the impedance attribute in the analysis. Thedefault is as defined in the specific routing network layer used in your[RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html). You can specify any attribute names listed in theService Directory under `Network Dataset -> Network Attributes` as `Usage Type: esriNAUTCost`.You can also specify a value of `none` to indicate that no network attributes shouldbe used for impedance. If you specify an empty array, it will default to the default of the service.For example, set `impedanceAttribute = "Time"` for the quickest route and`impedanceAttribute = "Length"` for shortest drive, assuming the service hasthose two esriNAUTCost attributes.For more information, see [Understanding the network attribute](http://desktop.arcgis.com/en/arcmap/latest/extensions/network-analyst/understanding-network-attributes.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#impedanceAttribute)
     */
    impedanceAttribute?: string;
    /**
     * The precision of the output geometry after generalization. If `0`, no generalizationof output geometry is performed. If present and positive, it represents the `MaximumAllowableOffset`parameter and generalization is performed according to `IPolycurve.Generalize`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#outputGeometryPrecision)
     */
    outputGeometryPrecision?: number;
    /**
     * The units of the output geometry precision.**Possible Values:** centimeters | decimal-degrees | decimeters | feet | inches |kilometers | meters | miles | millimeters | nautical-miles | points | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#outputGeometryPrecisionUnits)
     */
    outputGeometryPrecisionUnits?:
      | "centimeters"
      | "decimal-degrees"
      | "decimeters"
      | "feet"
      | "inches"
      | "kilometers"
      | "meters"
      | "miles"
      | "millimeters"
      | "nautical-miles"
      | "points"
      | "yards";
    /**
     * The type of output lines to be generated in the result. The default is as definedin the specific routing network layer used in your [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html).Possible Value | Description---------------|------------none | No lines are returnedstraight | Only returns straight linestrue-shape | Return the true shape of the linestrue-shape-with-measure | Return the true shape of the lines with their measurements
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#outputLines)
     */
    outputLines?: "none" | "straight" | "true-shape" | "true-shape-with-measure";
    /**
     * The well-known ID of the spatial reference for the geometries returned with the analysis results.If not specified, the geometries are returned in the spatial reference of the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties | string;
    /**
     * The set of point barriers loaded as network locations during analysis. At ArcGIS Server 10.1an optional url property was added. Use this property to specify a REST query request to a Feature,Map or GP Service that returns a JSON feature set. The url propertycan be specified using [DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html).Note that either the features or url property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#pointBarriers)
     */
    pointBarriers?: DataLayerProperties | FeatureSetProperties;
    /**
     * The set of polygon barriers loaded as network locations during analysis. At ArcGIS Server 10.1,an optional `url` property was added. Use this property to specify a REST query request to a Feature,Map or GP Service that returns a JSON feature set. The url property can bespecified using [DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Note that either the `features` or`url` property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#polygonBarriers)
     */
    polygonBarriers?: DataLayerProperties | FeatureSetProperties;
    /**
     * The set of polyline barriers loaded as network locations during analysis. At ArcGIS Server 10.1,an optional `url` property was added. Use this property to specify a REST query request to a Feature,Map or GP Service that returns a JSON feature set. The url property can bespecified using [DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Note that either the `features` or`url` property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#polylineBarriers)
     */
    polylineBarriers?: DataLayerProperties | FeatureSetProperties;
    /**
     * If `true`, keeps the first stop fixed in the sequence even when `findBestSequence = true`.Only applicable if `findBestSequence = true`. The default is as defined in the specific routingnetwork layer used in your [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#preserveFirstStop)
     */
    preserveFirstStop?: boolean;
    /**
     * If `true`, keeps the last stop fixed in the sequence even when `findBestSequence = true`.Only applicable if `findBestSequence = true`. The default is as defined in the specificrouting network layer used in your [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#preserveLastStop)
     */
    preserveLastStop?: boolean;
    /**
     * The list of network attribute names to be used as restrictions with the analysis.The default is as defined in the specific routing network layer used in your[RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html). Possible values are listed in the Service Directory under`Network Dataset -> Network Attributes`. You can also specify a value of `none` to indicate thatno network attributes should be used as restrictions. If you specify an empty array,it will default to the default of the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#restrictionAttributes)
     */
    restrictionAttributes?: string[];
    /**
     * Specifies how U-Turns should be handled. The default is as defined in the specificrouting network layer used in your [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html).**Possible Values:**  allow-backtrack | at-dead-ends-only |no-backtrack | at-dead-ends-and-intersections
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#restrictUTurns)
     */
    restrictUTurns?: "allow-backtrack" | "at-dead-ends-only" | "no-backtrack" | "at-dead-ends-and-intersections";
    /**
     * If `true`, barriers are returned with the [RouteResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#returnBarriers)
     *
     * @default false
     */
    returnBarriers?: boolean;
    /**
     * Indicates whether the service should generate driving directions for each route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#returnDirections)
     *
     * @default false
     */
    returnDirections?: boolean;
    /**
     * If `true`, polygon barriers are returned in the [RouteResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#returnPolygonBarriers)
     *
     * @default false
     */
    returnPolygonBarriers?: boolean;
    /**
     * If `true`, polyline barriers are returned in the [RouteResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#returnPolylineBarriers)
     *
     * @default false
     */
    returnPolylineBarriers?: boolean;
    /**
     * If `true`, routes are generated and returned in the route property of each [RouteResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#returnRoutes)
     */
    returnRoutes?: boolean;
    /**
     * If `true`, stops are returned in the stops property of each [RouteResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#returnStops)
     */
    returnStops?: boolean;
    /**
     * If `true`, `z` values are returned in the [RouteResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#returnZ)
     */
    returnZ?: boolean;
    /**
     * The time the route begins. If not specified, the default is the time specified in the route service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#startTime)
     */
    startTime?: DateProperties;
    /**
     * If `true`, the start time will be in UTC format.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#startTimeIsUTC)
     */
    startTimeIsUTC?: boolean;
    /**
     * The set of stops loaded as network locations during analysis. When `stops` takes a FeatureSet,each feature in the FeatureSet must have a defined spatial reference. If the feature contains`x` and `y` attributes, those values are used for the stop, even if the feature includes geometry.At ArcGIS Server 10.1 an optional `url` property was added. Use this property to specify a RESTquery request to a Feature, Map or GP Service that returns a JSON feature set. The `url` propertycan be specified using DataFile Note that either the features or url property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#stops)
     */
    stops?: DataLayerProperties | FeatureSetProperties;
    /**
     * Travel modes define how a pedestrian, car, truck or other medium of transportation moves through the street network.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#travelMode)
     */
    travelMode?: string;
    /**
     * If `true`, the hierarchy attribute for the network should be used in analysis. The default isas defined in the specific routing network layer used in your [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#useHierarchy)
     *
     * @default false
     */
    useHierarchy?: boolean;
    /**
     * A useful feature of the [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html) is the ability to constrain stop visitsto certain times of day, or "time windows". If you were required to deliver orders to four homes andeach customer was available during a limited time period during the day, the route task could help youfind the most efficient path for making all the deliveries.Time windows are treated as a "soft" constraint. This means that although the solver attempts to honortime windows, if necessary, it will violate the time windows of some stops in order to reach them.Remember, the stops will be visited in the order they were added unless you set `RouteParameters.findBestSequence = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#useTimeWindows)
     *
     * @default false
     */
    useTimeWindows?: boolean;
  }

  /**
   * An object describing the parameter values for the[attributeParameterValues](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#attributeParameterValues) property of[RouteParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#AttributeParamValue)
   */
  export interface AttributeParamValue extends Object {
    /**
     * The name of the attribute.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#AttributeParamValue)
     */
    attributeName: string;
    /**
     * The name of the parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#AttributeParamValue)
     */
    parameterName: string;
    /**
     * The parameter's value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#AttributeParamValue)
     */
    value: string;
  }

  interface RouteResult extends Accessor, JSONSupport {
    /**
     * Route directions are returned if `RouteParameters.returnDirections = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html#directions)
     */
    directions: DirectionsFeatureSet;
    /**
     * The Route graphic that is returned if `RouteParameters.returnRoutes = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html#route)
     */
    route: Graphic;
    /**
     * The name of the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html#routeName)
     */
    routeName: string;
    /**
     * Array of stops. Returned only if `RouteParameters.returnStops = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html#stops)
     */
    stops: Graphic[];
  }

  interface RouteResultConstructor {
    new (properties?: RouteResultProperties): RouteResult;

    fromJSON(json: any): RouteResult;
  }

  export const RouteResult: RouteResultConstructor;

  interface RouteResultProperties {
    /**
     * Route directions are returned if `RouteParameters.returnDirections = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html#directions)
     */
    directions?: DirectionsFeatureSetProperties;
    /**
     * The Route graphic that is returned if `RouteParameters.returnRoutes = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html#route)
     */
    route?: GraphicProperties;
    /**
     * The name of the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html#routeName)
     */
    routeName?: string;
    /**
     * Array of stops. Returned only if `RouteParameters.returnStops = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html#stops)
     */
    stops?: GraphicProperties[];
  }

  interface ServiceAreaParameters extends Accessor, JSONSupport {
    /**
     * The list of network attribute names to be accumulated with the analysis(i.e. which attributes should be returned as part of the response). Thedefault is as defined in the specific routing network layer used inyour [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html). You can specify any attributesnames listed in the Service Directory under`Network Dataset > Network Attributes` as `Usage Type: esriNAUTCost`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#accumulateAttributes)
     */
    accumulateAttributes: string[];
    /**
     * A set of attribute parameter values that can be parameterized to determinewhich network elements can be used by a vehicle. The parameter holding a vehiclecharacteristic is compared to a value coming from a descriptor attribute todetermine whether or not a network element is traversable. For example, aparameterized restriction attribute can compare the height of your vehiclewith a descriptor attribute that holds the clearance under overpassesthrough tunnels. If the vehicle's height is greater than the clearance,the edge is restricted.Parameterized cost attributes that reference othercost attributes and scale them, can also be used. This is useful when inclementweather like ice, fog or heavy rain, descends on the study area and hindersnormal flow of traffic. By having a parameter already outfitted on a costattribute, travel-time expectations and traversable network paths can beadjusted with respect to changes in traffic speeds.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#attributeParameterValues)
     */
    attributeParameterValues: any[];
    /**
     * An array of numbers defining the breaks. The default valueis defined in the network analysis layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#defaultBreaks)
     */
    defaultBreaks: number[];
    /**
     * When `true`, restricted network elements should be consideredwhen finding network locations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#doNotLocateOnRestrictedElements)
     */
    doNotLocateOnRestrictedElements: boolean;
    /**
     * An array of network source names to NOT use when generating polygons.This property specifies if certain network sources should be excludedfrom the service area polygon generation. A service area on a multi-modalnetwork where only one mode is being used to compute the service areawould get a more appropriate shape if other modes are excluded from the polygons.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#excludeSourcesFromPolygons)
     */
    excludeSourcesFromPolygons: string[];
    /**
     * The set of facilities loaded as network locations during analysis.At ArcGIS Server 10.1, an optional url property was added. Use this propertyto specify a REST query request to a Feature, Map or GP Service that returnsa JSON feature set. The url property can be specified using `DataFile`. Notethat either the features or url property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#facilities)
     */
    facilities: DataLayer | FeatureSet;
    /**
     * The network attribute name used as the impedance attribute in analysis.The default is as defined in the routing network layer used in your[RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html). You can specify any attributenames listed in the Service Directory under `Network Dataset > Network Attributes`as `Usage Type: esriNAUTCost`. You can also specify a value of `none` to indicatethat no network attributes should be used for impedance. If youspecify an empty string, it will use the default of the service.For example, set `impedanceAttribute = 'Time'` for quickest route and `impedanceAttribute = 'Length'` forshortest drive, assuming the service has those two esriNAUTCost attributes.View the [Understanding the network attribute](http://desktop.arcgis.com/en/arcmap/latest/extensions/network-analyst/understanding-network-attributes.htm)ArcGIS desktop help topic for more details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#impedanceAttribute)
     */
    impedanceAttribute: string;
    /**
     * If `true`, similar ranges will be merged in the resulting polygons.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#mergeSimilarPolygonRanges)
     *
     * @default false
     */
    mergeSimilarPolygonRanges: boolean;
    /**
     * The precision of the output geometry after generalization. If `0`, nogeneralization of output geometry is performed. If present and positive,it represents the `MaximumAllowableOffset` parameter and generalizationis performed according to IPolycurve.Generalize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#outputGeometryPrecision)
     */
    outputGeometryPrecision: number;
    /**
     * The units of the output geometry precision.**Possible Values:** centimeters | decimal-degrees | decimeters | feet | inches |kilometers | meters | miles | millimeters | nautical-miles | points | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#outputGeometryPrecisionUnits)
     */
    outputGeometryPrecisionUnits:
      | "centimeters"
      | "decimal-degrees"
      | "decimeters"
      | "feet"
      | "inches"
      | "kilometers"
      | "meters"
      | "miles"
      | "millimeters"
      | "nautical-miles"
      | "points"
      | "yards";
    /**
     * The type of output lines to be generated in the result. The default isdefined in the specific routing network layer used in your[ServiceAreaTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ServiceAreaTask.html).Possible Value | Description---------------|------------none | No lines are returnedstraight | Only returns straight linestrue-shape | Return the true shape of the linestrue-shape-with-measure | Return the true shape of the lines with their measurements
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#outputLines)
     */
    outputLines: "none" | "straight" | "true-shape" | "true-shape-with-measure";
    /**
     * The type of output polygons to be generated in the result.The default is as defined in the specific routingnetwork layer used in your [ServiceAreaTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ServiceAreaTask.html).**Possible Values:** none | simplified | detailed
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#outputPolygons)
     */
    outputPolygons: "none" | "simplified" | "detailed";
    /**
     * The well-known ID of the spatial reference for the geometriesreturned with the analysis results. If `outSpatialReference` is not specified,the geometries are returned in the spatial reference of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference;
    /**
     * Indicates if the lines should overlap from multiple facilities.The default is defined by the network analysis layer in your[ServiceAreaTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ServiceAreaTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#overlapLines)
     *
     * @default false
     */
    overlapLines: boolean;
    /**
     * Indicates if the polygons should overlap from multiple facilities.The default is defined by the network analysis layer in your[ServiceAreaTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ServiceAreaTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#overlapPolygons)
     *
     * @default false
     */
    overlapPolygons: boolean;
    /**
     * The set of point barriers loaded as network locations during analysis.At ArcGIS Server 10.1, an optional url property was added. Use thisproperty to specify a REST query request to a Feature, Map or GP Service that returnsa JSON feature set. The url property can be specified using[DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Note that either the features or urlproperty should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#pointBarriers)
     */
    pointBarriers: DataLayer | FeatureSet;
    /**
     * The set of polygon barriers loaded as network locations during analysis.At ArcGIS Server 10.1, an optional url property was added. Use this propertyto specify a REST query request to a Feature, Map or GP Service that returnsa JSON feature set. The url property can be specified using[DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Note that either the features or urlproperty should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#polygonBarriers)
     */
    polygonBarriers: DataLayer | FeatureSet;
    /**
     * The set of polyline barriers loaded as network locations during analysis.At ArcGIS Server 10.1, an optional url property was added. Use this propertyto specify a REST query request to a Feature, Map or GP Service that returnsa JSON feature set. The url property can be specified using[DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Note that either the features or urlproperty should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#polylineBarriers)
     */
    polylineBarriers: DataLayer | FeatureSet;
    /**
     * The list of network attribute names to be used as restrictions with the analysis.The default is as defined in the specific routing network layer used in your[RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html). You can specify any attributes names listedin the Service Directory under `Network Dataset > Network Attributes` as `Usage Type: esriNAUTCost`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#restrictionAttributes)
     */
    restrictionAttributes: string[];
    /**
     * Specifies how U-turns should be handled. The default is defined in therouting network layer used in your RouteTask.Possible Value | Description---------------|------------allow-backtrack | Allows U-turns on everywhereat-dead-ends-only | Only allows U-turns at dead endsno-backtrack | Restricts U-turns everywhereat-dead-ends-and-intersections | Only allows U-turns at dead ends and intersections
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#restrictUTurns)
     */
    restrictUTurns: "allow-backtrack" | "at-dead-ends-only" | "no-backtrack" | "at-dead-ends-and-intersections";
    /**
     * If `true`, facilities will be returned with the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#returnFacilities)
     *
     * @default false
     */
    returnFacilities: boolean;
    /**
     * If `true`, point barriers will be returned in the[pointBarriers](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#pointBarriers)property of the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#returnPointBarriers)
     *
     * @default false
     */
    returnPointBarriers: boolean;
    /**
     * If `true`, polygon barriers will be returned in the[polygonBarriers](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#polygonBarriers)property of the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#returnPolygonBarriers)
     *
     * @default false
     */
    returnPolygonBarriers: boolean;
    /**
     * If `true`, polyline barriers will be returned in the[polylineBarriers](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#polylineBarriers)property of the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#returnPolylineBarriers)
     *
     * @default false
     */
    returnPolylineBarriers: boolean;
    /**
     * If `true`, lines will be split at breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#splitLinesAtBreaks)
     *
     * @default false
     */
    splitLinesAtBreaks: boolean;
    /**
     * If `true`, polygons will be split at breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#splitPolygonsAtBreaks)
     *
     * @default false
     */
    splitPolygonsAtBreaks: boolean;
    /**
     * Local date and time at the facility. If `travelDirection = "to-facility"`,the `timeOfDay` value specifies arrival time at the facility. if `travelDirection = "from-facility"`,`timeOfDay` specifies departure time from the facility. Requires ArcGIS Server service version 10.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#timeOfDay)
     */
    timeOfDay: Date;
    /**
     * Options for traveling to or from the facility. Default values are defined by the network layer.Possible Value | Description---------------|------------from-facility | Sets travel direction from the facilityto-facility | Sets travel direction to the facility
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#travelDirection)
     */
    travelDirection: "from-facility" | "to-facility";
    /**
     * Travel modes define how a pedestrian, car, truck or other medium of transportation moves through the street network.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#travelMode)
     */
    travelMode: string;
    /**
     * If `true`, the outermost polygon (at the maximum break value) will be trimmed.The default is defined in the network analysis layer in your[ServiceAreaTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ServiceAreaTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#trimOuterPolygon)
     *
     * @default false
     */
    trimOuterPolygon: boolean;
    /**
     * If polygons are being trimmed, provides the distance to trim.The default value is defined in the network analysis layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#trimPolygonDistance)
     */
    trimPolygonDistance: number;
    /**
     * If polygons are being trimmed, specifies the units of[trimPolygonDistance](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#trimPolygonDistance). The default is defined in the networkanalysis layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#trimPolygonDistanceUnits)
     */
    trimPolygonDistanceUnits:
      | "centimeters"
      | "decimal-degrees"
      | "decimeters"
      | "feet"
      | "inches"
      | "kilometers"
      | "meters"
      | "miles"
      | "millimeters"
      | "nautical-miles"
      | "points"
      | "yards";
    /**
     * When `true`, the hierarchy attributes for the network will be used inthe analysis. The default value is defined in the network layer.`useHierarchy` cannot be used in conjunction with [outputLines](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#outputLines).Requires an ArcGIS Server service version 10.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#useHierarchy)
     */
    useHierarchy: boolean;
  }

  interface ServiceAreaParametersConstructor {
    new (properties?: ServiceAreaParametersProperties): ServiceAreaParameters;

    fromJSON(json: any): ServiceAreaParameters;
  }

  export const ServiceAreaParameters: ServiceAreaParametersConstructor;

  interface ServiceAreaParametersProperties {
    /**
     * The list of network attribute names to be accumulated with the analysis(i.e. which attributes should be returned as part of the response). Thedefault is as defined in the specific routing network layer used inyour [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html). You can specify any attributesnames listed in the Service Directory under`Network Dataset > Network Attributes` as `Usage Type: esriNAUTCost`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#accumulateAttributes)
     */
    accumulateAttributes?: string[];
    /**
     * A set of attribute parameter values that can be parameterized to determinewhich network elements can be used by a vehicle. The parameter holding a vehiclecharacteristic is compared to a value coming from a descriptor attribute todetermine whether or not a network element is traversable. For example, aparameterized restriction attribute can compare the height of your vehiclewith a descriptor attribute that holds the clearance under overpassesthrough tunnels. If the vehicle's height is greater than the clearance,the edge is restricted.Parameterized cost attributes that reference othercost attributes and scale them, can also be used. This is useful when inclementweather like ice, fog or heavy rain, descends on the study area and hindersnormal flow of traffic. By having a parameter already outfitted on a costattribute, travel-time expectations and traversable network paths can beadjusted with respect to changes in traffic speeds.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#attributeParameterValues)
     */
    attributeParameterValues?: any[];
    /**
     * An array of numbers defining the breaks. The default valueis defined in the network analysis layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#defaultBreaks)
     */
    defaultBreaks?: number[];
    /**
     * When `true`, restricted network elements should be consideredwhen finding network locations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#doNotLocateOnRestrictedElements)
     */
    doNotLocateOnRestrictedElements?: boolean;
    /**
     * An array of network source names to NOT use when generating polygons.This property specifies if certain network sources should be excludedfrom the service area polygon generation. A service area on a multi-modalnetwork where only one mode is being used to compute the service areawould get a more appropriate shape if other modes are excluded from the polygons.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#excludeSourcesFromPolygons)
     */
    excludeSourcesFromPolygons?: string[];
    /**
     * The set of facilities loaded as network locations during analysis.At ArcGIS Server 10.1, an optional url property was added. Use this propertyto specify a REST query request to a Feature, Map or GP Service that returnsa JSON feature set. The url property can be specified using `DataFile`. Notethat either the features or url property should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#facilities)
     */
    facilities?: DataLayerProperties | FeatureSetProperties;
    /**
     * The network attribute name used as the impedance attribute in analysis.The default is as defined in the routing network layer used in your[RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html). You can specify any attributenames listed in the Service Directory under `Network Dataset > Network Attributes`as `Usage Type: esriNAUTCost`. You can also specify a value of `none` to indicatethat no network attributes should be used for impedance. If youspecify an empty string, it will use the default of the service.For example, set `impedanceAttribute = 'Time'` for quickest route and `impedanceAttribute = 'Length'` forshortest drive, assuming the service has those two esriNAUTCost attributes.View the [Understanding the network attribute](http://desktop.arcgis.com/en/arcmap/latest/extensions/network-analyst/understanding-network-attributes.htm)ArcGIS desktop help topic for more details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#impedanceAttribute)
     */
    impedanceAttribute?: string;
    /**
     * If `true`, similar ranges will be merged in the resulting polygons.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#mergeSimilarPolygonRanges)
     *
     * @default false
     */
    mergeSimilarPolygonRanges?: boolean;
    /**
     * The precision of the output geometry after generalization. If `0`, nogeneralization of output geometry is performed. If present and positive,it represents the `MaximumAllowableOffset` parameter and generalizationis performed according to IPolycurve.Generalize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#outputGeometryPrecision)
     */
    outputGeometryPrecision?: number;
    /**
     * The units of the output geometry precision.**Possible Values:** centimeters | decimal-degrees | decimeters | feet | inches |kilometers | meters | miles | millimeters | nautical-miles | points | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#outputGeometryPrecisionUnits)
     */
    outputGeometryPrecisionUnits?:
      | "centimeters"
      | "decimal-degrees"
      | "decimeters"
      | "feet"
      | "inches"
      | "kilometers"
      | "meters"
      | "miles"
      | "millimeters"
      | "nautical-miles"
      | "points"
      | "yards";
    /**
     * The type of output lines to be generated in the result. The default isdefined in the specific routing network layer used in your[ServiceAreaTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ServiceAreaTask.html).Possible Value | Description---------------|------------none | No lines are returnedstraight | Only returns straight linestrue-shape | Return the true shape of the linestrue-shape-with-measure | Return the true shape of the lines with their measurements
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#outputLines)
     */
    outputLines?: "none" | "straight" | "true-shape" | "true-shape-with-measure";
    /**
     * The type of output polygons to be generated in the result.The default is as defined in the specific routingnetwork layer used in your [ServiceAreaTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ServiceAreaTask.html).**Possible Values:** none | simplified | detailed
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#outputPolygons)
     */
    outputPolygons?: "none" | "simplified" | "detailed";
    /**
     * The well-known ID of the spatial reference for the geometriesreturned with the analysis results. If `outSpatialReference` is not specified,the geometries are returned in the spatial reference of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties;
    /**
     * Indicates if the lines should overlap from multiple facilities.The default is defined by the network analysis layer in your[ServiceAreaTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ServiceAreaTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#overlapLines)
     *
     * @default false
     */
    overlapLines?: boolean;
    /**
     * Indicates if the polygons should overlap from multiple facilities.The default is defined by the network analysis layer in your[ServiceAreaTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ServiceAreaTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#overlapPolygons)
     *
     * @default false
     */
    overlapPolygons?: boolean;
    /**
     * The set of point barriers loaded as network locations during analysis.At ArcGIS Server 10.1, an optional url property was added. Use thisproperty to specify a REST query request to a Feature, Map or GP Service that returnsa JSON feature set. The url property can be specified using[DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Note that either the features or urlproperty should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#pointBarriers)
     */
    pointBarriers?: DataLayerProperties | FeatureSetProperties;
    /**
     * The set of polygon barriers loaded as network locations during analysis.At ArcGIS Server 10.1, an optional url property was added. Use this propertyto specify a REST query request to a Feature, Map or GP Service that returnsa JSON feature set. The url property can be specified using[DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Note that either the features or urlproperty should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#polygonBarriers)
     */
    polygonBarriers?: DataLayerProperties | FeatureSetProperties;
    /**
     * The set of polyline barriers loaded as network locations during analysis.At ArcGIS Server 10.1, an optional url property was added. Use this propertyto specify a REST query request to a Feature, Map or GP Service that returnsa JSON feature set. The url property can be specified using[DataFile](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataFile.html). Note that either the features or urlproperty should be specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#polylineBarriers)
     */
    polylineBarriers?: DataLayerProperties | FeatureSetProperties;
    /**
     * The list of network attribute names to be used as restrictions with the analysis.The default is as defined in the specific routing network layer used in your[RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html). You can specify any attributes names listedin the Service Directory under `Network Dataset > Network Attributes` as `Usage Type: esriNAUTCost`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#restrictionAttributes)
     */
    restrictionAttributes?: string[];
    /**
     * Specifies how U-turns should be handled. The default is defined in therouting network layer used in your RouteTask.Possible Value | Description---------------|------------allow-backtrack | Allows U-turns on everywhereat-dead-ends-only | Only allows U-turns at dead endsno-backtrack | Restricts U-turns everywhereat-dead-ends-and-intersections | Only allows U-turns at dead ends and intersections
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#restrictUTurns)
     */
    restrictUTurns?: "allow-backtrack" | "at-dead-ends-only" | "no-backtrack" | "at-dead-ends-and-intersections";
    /**
     * If `true`, facilities will be returned with the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#returnFacilities)
     *
     * @default false
     */
    returnFacilities?: boolean;
    /**
     * If `true`, point barriers will be returned in the[pointBarriers](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#pointBarriers)property of the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#returnPointBarriers)
     *
     * @default false
     */
    returnPointBarriers?: boolean;
    /**
     * If `true`, polygon barriers will be returned in the[polygonBarriers](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#polygonBarriers)property of the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#returnPolygonBarriers)
     *
     * @default false
     */
    returnPolygonBarriers?: boolean;
    /**
     * If `true`, polyline barriers will be returned in the[polylineBarriers](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#polylineBarriers)property of the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#returnPolylineBarriers)
     *
     * @default false
     */
    returnPolylineBarriers?: boolean;
    /**
     * If `true`, lines will be split at breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#splitLinesAtBreaks)
     *
     * @default false
     */
    splitLinesAtBreaks?: boolean;
    /**
     * If `true`, polygons will be split at breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#splitPolygonsAtBreaks)
     *
     * @default false
     */
    splitPolygonsAtBreaks?: boolean;
    /**
     * Local date and time at the facility. If `travelDirection = "to-facility"`,the `timeOfDay` value specifies arrival time at the facility. if `travelDirection = "from-facility"`,`timeOfDay` specifies departure time from the facility. Requires ArcGIS Server service version 10.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#timeOfDay)
     */
    timeOfDay?: DateProperties;
    /**
     * Options for traveling to or from the facility. Default values are defined by the network layer.Possible Value | Description---------------|------------from-facility | Sets travel direction from the facilityto-facility | Sets travel direction to the facility
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#travelDirection)
     */
    travelDirection?: "from-facility" | "to-facility";
    /**
     * Travel modes define how a pedestrian, car, truck or other medium of transportation moves through the street network.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#travelMode)
     */
    travelMode?: string;
    /**
     * If `true`, the outermost polygon (at the maximum break value) will be trimmed.The default is defined in the network analysis layer in your[ServiceAreaTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ServiceAreaTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#trimOuterPolygon)
     *
     * @default false
     */
    trimOuterPolygon?: boolean;
    /**
     * If polygons are being trimmed, provides the distance to trim.The default value is defined in the network analysis layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#trimPolygonDistance)
     */
    trimPolygonDistance?: number;
    /**
     * If polygons are being trimmed, specifies the units of[trimPolygonDistance](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#trimPolygonDistance). The default is defined in the networkanalysis layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#trimPolygonDistanceUnits)
     */
    trimPolygonDistanceUnits?:
      | "centimeters"
      | "decimal-degrees"
      | "decimeters"
      | "feet"
      | "inches"
      | "kilometers"
      | "meters"
      | "miles"
      | "millimeters"
      | "nautical-miles"
      | "points"
      | "yards";
    /**
     * When `true`, the hierarchy attributes for the network will be used inthe analysis. The default value is defined in the network layer.`useHierarchy` cannot be used in conjunction with [outputLines](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#outputLines).Requires an ArcGIS Server service version 10.1 or greater.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#useHierarchy)
     */
    useHierarchy?: boolean;
  }

  interface ServiceAreaSolveResult extends Accessor, JSONSupport {
    /**
     * Array of points only returned if `ServiceAreaParameters.returnFacilities = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#facilities)
     */
    facilities: Point[];
    /**
     * Message received when solve is completed. If a service area cannot be solved,the message returned by the server identifies the incident that could not be solved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#messages)
     */
    messages: NAMessage[];
    /**
     * The point barriers are returned only if `ServiceAreaParameters.returnPointBarriers = true`(which is not the default). If you send in the point barriers as a[FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html) (instead of using[DataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html)), you already have the barriers and might not need torequest them back from the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#pointBarriers)
     */
    pointBarriers: Point[];
    /**
     * The polygon barriers are returned only if `ServiceAreaParameters.returnPolygonBarriers = true`(which is not the default). If you send in the polygon barriers as a[FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html) (instead of using[DataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html)), you already have the barriers and mightnot need to request them back from the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#polygonBarriers)
     */
    polygonBarriers: Polygon[];
    /**
     * The polyline barriers are returned only if `ServiceAreaParameters.returnPolylineBarriers = true`(which is not the default). If you send in the polyline barriers as a[FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html) (instead of using[DataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html)), you already have the barriers and mightnot need to request them back from the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#polylineBarriers)
     */
    polylineBarriers: Polyline[];
    /**
     * An array of service area polygon graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#serviceAreaPolygons)
     */
    serviceAreaPolygons: Graphic[];
    /**
     * An array of service area polyline graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#serviceAreaPolylines)
     */
    serviceAreaPolylines: Graphic[];
  }

  interface ServiceAreaSolveResultConstructor {
    new (properties?: ServiceAreaSolveResultProperties): ServiceAreaSolveResult;

    fromJSON(json: any): ServiceAreaSolveResult;
  }

  export const ServiceAreaSolveResult: ServiceAreaSolveResultConstructor;

  interface ServiceAreaSolveResultProperties {
    /**
     * Array of points only returned if `ServiceAreaParameters.returnFacilities = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#facilities)
     */
    facilities?: PointProperties[];
    /**
     * Message received when solve is completed. If a service area cannot be solved,the message returned by the server identifies the incident that could not be solved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#messages)
     */
    messages?: NAMessageProperties[];
    /**
     * The point barriers are returned only if `ServiceAreaParameters.returnPointBarriers = true`(which is not the default). If you send in the point barriers as a[FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html) (instead of using[DataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html)), you already have the barriers and might not need torequest them back from the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#pointBarriers)
     */
    pointBarriers?: PointProperties[];
    /**
     * The polygon barriers are returned only if `ServiceAreaParameters.returnPolygonBarriers = true`(which is not the default). If you send in the polygon barriers as a[FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html) (instead of using[DataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html)), you already have the barriers and mightnot need to request them back from the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#polygonBarriers)
     */
    polygonBarriers?: PolygonProperties[];
    /**
     * The polyline barriers are returned only if `ServiceAreaParameters.returnPolylineBarriers = true`(which is not the default). If you send in the polyline barriers as a[FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html) (instead of using[DataLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html)), you already have the barriers and mightnot need to request them back from the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#polylineBarriers)
     */
    polylineBarriers?: PolylineProperties[];
    /**
     * An array of service area polygon graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#serviceAreaPolygons)
     */
    serviceAreaPolygons?: GraphicProperties[];
    /**
     * An array of service area polyline graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#serviceAreaPolylines)
     */
    serviceAreaPolylines?: GraphicProperties[];
  }

  interface StatisticDefinition extends Accessor, JSONSupport {
    /**
     * Defines the field for which statistics will be calculated. This can be service field namesor SQL expressions. See the snippets below for examples.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-StatisticDefinition.html#onStatisticField)
     */
    onStatisticField: string;
    /**
     * Specifies the output field name for the requested statistic. Output field names can only contain alpha-numeric characters and an underscore. If no outputfield name is specified, the server assigns a field name to the returned statistic field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-StatisticDefinition.html#outStatisticFieldName)
     */
    outStatisticFieldName: string;
    /**
     * Defines the type of statistic.**Possible Values:** count | sum | min | max | avg | stddev | var
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-StatisticDefinition.html#statisticType)
     */
    statisticType: "count" | "sum" | "min" | "max" | "avg" | "stddev" | "var";

    /**
     * Creates a deep clone of StatisticDefinition object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-StatisticDefinition.html#clone)
     *
     *
     */
    clone(): StatisticDefinition;
  }

  interface StatisticDefinitionConstructor {
    new (properties?: StatisticDefinitionProperties): StatisticDefinition;

    fromJSON(json: any): StatisticDefinition;
  }

  export const StatisticDefinition: StatisticDefinitionConstructor;

  interface StatisticDefinitionProperties {
    /**
     * Defines the field for which statistics will be calculated. This can be service field namesor SQL expressions. See the snippets below for examples.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-StatisticDefinition.html#onStatisticField)
     */
    onStatisticField?: string;
    /**
     * Specifies the output field name for the requested statistic. Output field names can only contain alpha-numeric characters and an underscore. If no outputfield name is specified, the server assigns a field name to the returned statistic field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-StatisticDefinition.html#outStatisticFieldName)
     */
    outStatisticFieldName?: string;
    /**
     * Defines the type of statistic.**Possible Values:** count | sum | min | max | avg | stddev | var
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-StatisticDefinition.html#statisticType)
     */
    statisticType?: "count" | "sum" | "min" | "max" | "avg" | "stddev" | "var";
  }

  interface TrimExtendParameters extends Accessor {
    /**
     * A flag used with the `trimExtend` operation.Possible Value | Description---------------|-------------default-curve-extension | The extension considers both ends of the path. The old ends remain and new points are added to the extended ends. The new points have attributes that are extrapolated from existing adjacent segments.relocate-ends | When an extension is performed at an end, relocate the end point to the new position.keep-end-attributes | When an extension is performed at an end, do not extrapolate the end segments attributes for the new point. Instead, the attributes will be the same as the current end.no-end-attributes | When an extension is performed at an end, do not extrapolate the end segments attributes for the new point. Instead the attributes will be empty.no-extend-at-from | Do not extend the 'from' end of any path.no-extend-at-to | Do not extend the 'to' end of any path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-TrimExtendParameters.html#extendHow)
     *
     * @default default-curve-extension
     */
    extendHow: string;
    /**
     * The array of polylines to trim or extend. The structure of each geometry in the array is the same as the structure of the JSON polylineobjects returned by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-TrimExtendParameters.html#polylines)
     */
    polylines: Polyline[];
    /**
     * A polyline used as a guide for trimming or extending input polylines. The structure of the polyline is the same as the structure of theJSON polyline object returned by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-TrimExtendParameters.html#trimExtendTo)
     */
    trimExtendTo: Polyline;

    /**
     * Converts an instance of  [this class]() to its ArcGIS portal JSON representation.See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html) topic in the Guide for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-TrimExtendParameters.html#toJSON)
     *
     *
     */
    toJSON(): any;
  }

  interface TrimExtendParametersConstructor {
    new (properties?: TrimExtendParametersProperties): TrimExtendParameters;
  }

  export const TrimExtendParameters: TrimExtendParametersConstructor;

  interface TrimExtendParametersProperties {
    /**
     * A flag used with the `trimExtend` operation.Possible Value | Description---------------|-------------default-curve-extension | The extension considers both ends of the path. The old ends remain and new points are added to the extended ends. The new points have attributes that are extrapolated from existing adjacent segments.relocate-ends | When an extension is performed at an end, relocate the end point to the new position.keep-end-attributes | When an extension is performed at an end, do not extrapolate the end segments attributes for the new point. Instead, the attributes will be the same as the current end.no-end-attributes | When an extension is performed at an end, do not extrapolate the end segments attributes for the new point. Instead the attributes will be empty.no-extend-at-from | Do not extend the 'from' end of any path.no-extend-at-to | Do not extend the 'to' end of any path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-TrimExtendParameters.html#extendHow)
     *
     * @default default-curve-extension
     */
    extendHow?: string;
    /**
     * The array of polylines to trim or extend. The structure of each geometry in the array is the same as the structure of the JSON polylineobjects returned by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-TrimExtendParameters.html#polylines)
     */
    polylines?: PolylineProperties[];
    /**
     * A polyline used as a guide for trimming or extending input polylines. The structure of the polyline is the same as the structure of theJSON polyline object returned by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-TrimExtendParameters.html#trimExtendTo)
     */
    trimExtendTo?: PolylineProperties;
  }

  interface Task extends Accessor {
    /**
     * The [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for data requests. These options can also be controlledthrough the `requestOptions` method parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Task.html#requestOptions)
     */
    requestOptions: any;
    /**
     * The ArcGIS Server REST service URL (usually of a Feature Service Layer or Map Service Layer) for use in a task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Task.html#url)
     */
    url: string;
  }

  interface TaskConstructor {
    new (properties?: TaskProperties): Task;
  }

  export const Task: TaskConstructor;

  interface TaskProperties {
    /**
     * The [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for data requests. These options can also be controlledthrough the `requestOptions` method parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Task.html#requestOptions)
     */
    requestOptions?: any;
    /**
     * The ArcGIS Server REST service URL (usually of a Feature Service Layer or Map Service Layer) for use in a task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Task.html#url)
     */
    url?: string;
  }

  interface ConfigurationTask extends Task {
    /**
     * URL to the ArcGIS Workflow Manager REST service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#url)
     */
    url: string;

    /**
     * Gets an array of all the user groups that are configured in the Workflow Manager system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#getAllGroups)
     *
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getAllGroups(requestOptions?: any): IPromise<any[]>;
    /**
     * Gets an array of all the users that are configured in the Workflow Manager system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#getAllUsers)
     *
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getAllUsers(requestOptions?: any): IPromise<any[]>;
    /**
     * Gets the properties and an array of geodatabase versions for a data workspace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#getDataWorkspaceDetails)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.dataWorkspaceId The unique id of the data workspace, whose version will be returned.
     * @param params.user The user name of the user who is requesting the information.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getDataWorkspaceDetails(
      params: ConfigurationTaskGetDataWorkspaceDetailsParams,
      requestOptions?: any
    ): IPromise<any[]>;
    /**
     * Gets a single user group in the Workflow Manager system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#getGroup)
     *
     * @param groupId The unique id of the  group whose information will be retrieved.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getGroup(groupId: number, requestOptions?: any): IPromise<any[]>;
    /**
     * Gets the detailed configuration properties of a job type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#getJobTypeDetails)
     *
     * @param jobTypeId The unique id of a job type.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getJobTypeDetails(jobTypeId: number, requestOptions?: any): IPromise<JobTypeDetails>;
    /**
     * Gets the configuration of a publicly accessible job query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#getPublicJobQueryDetails)
     *
     * @param queryId The unique id of public query.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getPublicJobQueryDetails(queryId: number, requestOptions?: any): IPromise<JobQueryDetails>;
    /**
     * Gets the [configuration information](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo) specific to a Workflow Manager system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#getServiceInfo)
     *
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getServiceInfo(requestOptions?: any): IPromise<WorkflowManagerServiceInfo>;
    /**
     * Gets an array of registered [table relationships](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#TableRelationship) in the Workflow Manager system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#getTableRelationshipsDetails)
     *
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getTableRelationshipsDetails(requestOptions?: any): IPromise<TableRelationship>;
    /**
     * Gets information for a single user in the system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#getUser)
     *
     * @param user The user name of the user whose information will be returned.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getUser(user: string, requestOptions?: any): IPromise<UserDetails>;
    /**
     * Gets the configuration of a user-owned job query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#getUserJobQueryDetails)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.queryId The unique id of user query.
     * @param params.user The user name of the user who is requesting the information.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getUserJobQueryDetails(
      params: ConfigurationTaskGetUserJobQueryDetailsParams,
      requestOptions?: any
    ): IPromise<JobQueryDetails>;
    /**
     * Gets all the job types a user is allowed to see and create.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#getVisibleJobTypes)
     *
     * @param user The user name of the user for whom the information will be retrieved.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getVisibleJobTypes(user: string, requestOptions?: any): IPromise<JobType>;
  }

  interface ConfigurationTaskConstructor {
    new (properties?: ConfigurationTaskProperties): ConfigurationTask;
  }

  export const ConfigurationTask: ConfigurationTaskConstructor;

  interface ConfigurationTaskProperties extends TaskProperties {
    /**
     * URL to the ArcGIS Workflow Manager REST service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#url)
     */
    url?: string;
  }

  export interface ConfigurationTaskGetDataWorkspaceDetailsParams extends Object {
    /**
     * The unique id of the data workspace, whose version will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#getDataWorkspaceDetails)
     */
    dataWorkspaceId: string;
    /**
     * The user name of the user who is requesting the information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#getDataWorkspaceDetails)
     */
    user: string;
  }

  export interface ConfigurationTaskGetUserJobQueryDetailsParams extends Object {
    /**
     * The unique id of user query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#getUserJobQueryDetails)
     */
    queryId: number;
    /**
     * The user name of the user who is requesting the information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#getUserJobQueryDetails)
     */
    user: string;
  }

  /**
   * A geospatial database that will be used for editing in the Workflow Manager system.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#DataWorkspace)
   */
  export interface DataWorkspace extends Object {
    /**
     * The unique id of the data workspace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#DataWorkspace)
     */
    id: string;
    /**
     * The name of the data workspace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#DataWorkspace)
     */
    name: string;
  }

  /**
   * The membership attributes of a group.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#GroupMembership)
   */
  export interface GroupMembership extends Object {
    /**
     * The unique id for the group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#GroupMembership)
     */
    id: number;
    /**
     * The name of the group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#GroupMembership)
     */
    name: string;
  }

  /**
   * The type of hold that can be applied to suspend the execution of a job.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#HoldType)
   */
  export interface HoldType extends Object {
    /**
     * The description of the type of hold.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#HoldType)
     */
    description: string;
    /**
     * The unique id for the hold type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#HoldType)
     */
    id: number;
    /**
     * The name of the hold type
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#HoldType)
     */
    name: string;
  }

  /**
   * The properties of a job priority. Job priority is a way to assign a level of importance to the job.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobPriority)
   */
  export interface JobPriority extends Object {
    /**
     * The description of the priority.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobPriority)
     */
    description: string;
    /**
     * The name of the priority.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobPriority)
     */
    name: string;
    /**
     * The unique id of the priority.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobPriority)
     */
    value: number;
  }

  /**
   * A query that is available to the user to execute. A query returns jobs based on a specific criteria.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQuery)
   */
  export interface JobQuery extends Object {
    /**
     * The unique id for the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQuery)
     */
    id: number;
    /**
     * The name of the priority.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQuery)
     */
    name: string;
  }

  /**
   * A container of job queries, it can also contain nested containers with child job query containers under it.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQueryContainer)
   */
  export interface JobQueryContainer extends Object {
    /**
     * One or more [job query containers](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQueryContainer) which are nested under the parent container.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQueryContainer)
     */
    containers: JobQueryContainer[];
    /**
     * The unique id for the container.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQueryContainer)
     */
    id: number;
    /**
     * The name of the query container.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQueryContainer)
     */
    name: string;
    /**
     * An array of [queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQuery) inside the query container.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQueryContainer)
     */
    queries: JobQuery[];
  }

  /**
   * Detailed properties of a job query.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQueryDetails)
   */
  export interface JobQueryDetails extends Object {
    /**
     * An array of field aliases included in the select statement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQueryDetails)
     */
    aliases: string[];
    /**
     * An array of fields included in the select statement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQueryDetails)
     */
    fields: string[];
    /**
     * The unique id for the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQueryDetails)
     */
    id: number;
    /**
     * The name of the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQueryDetails)
     */
    name: string;
    /**
     * The field used to order the results returned by the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQueryDetails)
     */
    orderBy: string;
    /**
     * An array of tables selected from and used in the where clause.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQueryDetails)
     */
    tables: string[];
    /**
     * The where clause used as filter for selecting job information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQueryDetails)
     */
    where: string;
  }

  /**
   * Properties of a job status.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobStatus)
   */
  export interface JobStatus extends Object {
    /**
     * An alias name for the status.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobStatus)
     */
    caption: string;
    /**
     * The description of the type of status.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobStatus)
     */
    description: string;
    /**
     * The unique id for the status type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobStatus)
     */
    id: number;
    /**
     * The name of the status type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobStatus)
     */
    name: string;
  }

  /**
   * A list of properties that describe a job type.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobType)
   */
  export interface JobType extends Object {
    /**
     * A category to group other similar job types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobType)
     */
    category: string;
    /**
     * The description of the job type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobType)
     */
    description: string;
    /**
     * The unique id for the job type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobType)
     */
    id: string;
    /**
     * The name of the job type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobType)
     */
    name: string;
    /**
     * The state of the job type.   **Possible Values:** draft | active | retired
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobType)
     */
    state: string;
  }

  /**
   * Detailed information of a job type.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
   */
  export interface JobTypeDetails extends Object {
    /**
     * The name of the geodatabase version that will be assigned the parent version of the job's geodatabase by default.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
     */
    defaultParentVersionName: string;
    /**
     * Indicates whether jobs of this type will have their workflows automatically executed, when created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
     */
    autoExecuteCreatedJobs: boolean;
    /**
     * The category of the job type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
     */
    category: string;
    /**
     * The name of the user or group that the job will be assigned to by default.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
     */
    defaultAssignedTo: string;
    /**
     * Indicates whether the job is assigned to a user, group or unassigned by default.   **Possible Values:** unassigned | user | group
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
     */
    defaultAssignedType: string;
    /**
     * The unique id of the default data workspace of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
     */
    defaultDataWorkspaceId: string;
    /**
     * The description that gets associated with the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
     */
    defaultDescription: string;
    /**
     * The default due date of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
     */
    defaultDueDate: string;
    /**
     * The duration for completing the job assigned by default.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
     */
    defaultJobDuration: number;
    /**
     * Indicates whether jobs of this type allows users to modify the current data workspace in the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
     */
    canDataWorkspaceChange: boolean;
    /**
     * The numeric priority value assigned to the job by default.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
     */
    defaultPriority: string;
    /**
     * The default start date of this job type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
     */
    defaultStartDate: Date;
    /**
     * The description of the job type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
     */
    description: string;
    /**
     * The unique id automatically generated for this job type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
     */
    id: string;
    /**
     * The naming scheme for this job type, which would serve as template for the name of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
     */
    jobNamingScheme: string;
    /**
     * The naming scheme for this job type, which would serve as template for the name of job's version.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
     */
    jobVersionNamingScheme: string;
    /**
     * The naming scheme for this job type, which would serve as template for the name of job's map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
     */
    mxdNamingScheme: string;
    /**
     * The job type name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
     */
    name: string;
    /**
     * The state of the job type.   **Possible Values:** draft | active | retired
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobTypeDetails)
     */
    state: string;
  }

  /**
   * A privilege in the Workflow Manager system that controls application access.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#Privilege)
   */
  export interface Privilege extends Object {
    /**
     * The description of the privilege.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#Privilege)
     */
    description: string;
    /**
     * The unique id for the privilege.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#Privilege)
     */
    id: number;
    /**
     * The name of the privilege.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#Privilege)
     */
    name: string;
  }

  /**
   * TableRelationship represents a list of extended properties tables and the properties that identify them like name and cardinality.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#TableRelationship)
   */
  export interface TableRelationship extends Object {
    /**
     * The type of extra property table relationship, one-to-one represents one row for each property and one-to-many represents there will be multiple values for the property.   **Possible Values:** one-to-one | one-to-many
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#TableRelationship)
     */
    cardinality: string;
    /**
     * The foreign key field used to join the jobs table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#TableRelationship)
     */
    linkField: string;
    /**
     * The alias name of the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#TableRelationship)
     */
    tableAlias: string;
    /**
     * The name of the extended properties table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#TableRelationship)
     */
    tableName: string;
  }

  /**
   * A list of properties including groups and privileges associated with a Workflow Manager user.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#UserDetails)
   */
  export interface UserDetails extends Object {
    /**
     * The last name of the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#UserDetails)
     */
    lastName: string;
    /**
     * The address of the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#UserDetails)
     */
    address: string;
    /**
     * The fax number of the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#UserDetails)
     */
    faxNumber: string;
    /**
     * The first name of the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#UserDetails)
     */
    firstName: string;
    /**
     * The full name of the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#UserDetails)
     */
    fullName: string;
    /**
     * An array of [group memberships](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#GroupMembership) of the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#UserDetails)
     */
    groups: GroupMembership[];
    /**
     * The email address of the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#UserDetails)
     */
    email: string;
    /**
     * The phone number of the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#UserDetails)
     */
    phoneNumber: string;
    /**
     * An array of [application privileges](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#Privilege) of the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#UserDetails)
     */
    privileges: Privilege[];
    /**
     * The room number of the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#UserDetails)
     */
    roomNumber: string;
    /**
     * The login username for the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#UserDetails)
     */
    userName: string;
    /**
     * An array of [queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQueryContainer) owned by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#UserDetails)
     */
    userQueries: JobQueryContainer[];
    /**
     * The zip code of the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#UserDetails)
     */
    zipCode: string;
  }

  /**
   * A list of properties that describe a geodatabase version.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#VersionInfo)
   */
  export interface VersionInfo extends Object {
    /**
     * The level of access to the geodatabase version.   **Possible Values:** esriVersionAccessPrivate | esriVersionAccessPublic | esriVersionAccessProtected
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#VersionInfo)
     */
    access: string;
    /**
     * The name of the geodatabase version.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#VersionInfo)
     */
    name: string;
    /**
     * The name of the parent version of the geodatabase.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#VersionInfo)
     */
    parent: string;
  }

  /**
   * The base properties of a Workflow Manager service.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
   */
  export interface WorkflowManagerServiceInfo extends Object {
    /**
     * An array of [job priorities](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobPriority) in the Workflow Manager system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    jobPriorities: JobPriority[];
    /**
     * An array of activity types in the Workflow Manager system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    activityTypes: ActivityType[];
    /**
     * The current software version.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    currentVersion: number;
    /**
     * An array of [data workspaces](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#DataWorkspace) in the Workflow Manager system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    dataWorkspaces: DataWorkspace[];
    /**
     * An array of [hold types](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#HoldType) in the Workflow Manager system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    holdTypes: HoldType[];
    /**
     * The configuration properties of the Workflow Manager system stored in the database table as key/value pairs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    configProperties: WorkflowManagerServiceInfoConfigProperties;
    /**
     * An array of [job statuses](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobStatus) in the Workflow Manager system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    jobStatuses: JobStatus[];
    /**
     * An array of [job types](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobType) in the Workflow Manager system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    jobTypes: JobType[];
    /**
     * An array of notification types in the Workflow Manager system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    notificationTypes: NotificationType[];
    /**
     * An array of [privileges](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#Privilege) in the Workflow Manager system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    privileges: Privilege[];
    /**
     * The array of [public queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#JobQueryContainer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    publicQueries: JobQueryContainer[];
  }

  export interface WorkflowManagerServiceInfoConfigProperties extends Object {
    /**
     * Indicates whether the location of interest (LOI) for jobs are allowed to overlap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    AOIOVERLAP: string;
    /**
     * The color of the current job's LOI when selected in the LOI tab. The value is in range of 0 to 167772155.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    AOISELECTIONCOLOR: number;
    /**
     * Indicates whether the job will be automatically assigned based on step assignment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    AUTOASSIGNJOB: boolean;
    /**
     * Indicates whether the job will be automatically closed after the last step in the workflow is marked as complete.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    AUTOCLOSEJOB: boolean;
    /**
     * Indicates whether the job workflow witll be automatically committed to the database when saved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    AUTOCOMMITWORKFLOW: boolean;
    /**
     * Indicates whether the status of the jobs will be automatically assigned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    AUTOSTATUSASSIGN: boolean;
    /**
     * Indicates whether the user will be required to confirm that they want to mark the current procedural step as complete.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    CONFIRMPROCEDURALCHECK: boolean;
    /**
     * The default email address to be used in the sender field when sending notifications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    DEFAULT_SENDER_EMAIL: string;
    /**
     * The default name displayed to be used in the sender field when sending notifications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    DEFAULT_SENDER_NAME: string;
    /**
     * Indicates whether notifications will be sent as HTML.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    HTML_SUPPORT: string;
    /**
     * The starting value of job ids in the system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    JOB_ID_START_VALUE: string;
    /**
     * Indicates whether the the number of days for each hold is taken out of the pending days calculation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    PENDING_DAYS_USE_HOLDS: boolean;
    /**
     * Indicates whether the user attempting to delete a job version would be prompted to enter a password for the sde owner of the versions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    PROMPTSDEPWD: boolean;
    /**
     * Indicates whether it will be required to mark procedural steps as started.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    REQUIREPROCEDURALCHECKSTART: number;
    /**
     * Indicates whether the editing behavior will be restricted to data in the job's AOI using editing restriction rules.   **Possible Values:** Warn | NoSelect | Off   * `Warn` - Warn users when selecting features outside the job AOI.   * `NoSelect` - Prevent users from selecting features outside the job AOI.   * `Off` - Allow edits to features outside the job AOI.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    RESTRICT_AOI_OPTION: string;
    /**
     * Indicates whether the spatial notifications will be sent on Workflow Manager Post.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    SEND_SN_CUSTOM_POST: boolean;
    /**
     * Indicates whether to show step ids on workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    SHOW_STEP_IDS: boolean;
    /**
     * Indicates whether the step completion percentage will be displayed on the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    SHOW_STEP_PERCENT_COMPLETE: boolean;
    /**
     * The password of the authenticated SMTP user in the secure SMTP server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    SMTP_PASSWORD: string;
    /**
     * Indicates whether the pending days will be displayed in the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    SHOW_PENDING_DAYS: boolean;
    /**
     * The SMTP server port to be used for sending notifications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    SMTP_PORT: string;
    /**
     * SMTP Authentication protocol.   **Possible Values:** SSL | TLS
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    SMTP_PROTOCOL: string;
    /**
     * The name of the SMTP Server to be used for sending notifications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    SMTP_SERVER: string;
    /**
     * The user name that is authenticated in the secure SMTP server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    SMTP_USERNAME: string;
    /**
     * Indicates whether to use step status assignment such that the job's status updates to match the step status when the step is reached.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    USE_STEP_STATUS: boolean;
    /**
     * Indicates the user store of the Workflow Manager system, whether the users will be stored in a Portal or the Workflow Manager system.   **Possible Values:** traditional | portal
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    USER_STORE: string;
    /**
     * Indicates whether a user will be authenticated using domain along with the user name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    USEUSERDOMAIN: boolean;
    /**
     * The fill color of a selected step in a workflow. The value is in range of 0 to 167772155. When the option is disabled it's value is -1.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    WF_SEL_STEP_FILL_COLOR: number;
    /**
     * The outline color of a selected step in a workflow. The value is in range of 0 to 167772155. When the option is disabled it's value is -1.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    WF_SEL_STEP_OUTLINE_COLOR: number;
    /**
     * The outline width of a selected step in a workflow.   **Possible Values:** 1 | 2 | 3
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    WF_SEL_STEP_OUTLINE_WIDTH: number;
    /**
     * Indicates whether the LOI of the job will be automatically zoomed to in the LOI tab.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ConfigurationTask.html#WorkflowManagerServiceInfo)
     */
    ZOOMTOAOI: boolean;
  }

  interface JobTask extends Task {
    /**
     * URL to the ArcGIS Workflow Manager REST service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#url)
     */
    url: string;

    /**
     * Uploads a file and attaches it to the job as an embedded attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#addEmbeddedAttachment)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.form The form element that contains the file input control. The form parameter can be an instance of FormData. Using FormData you can send a "multipart/form-data" request to the server without having to create an HTML form element in markup. Note that the FormData api is not available in all browsers.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    addEmbeddedAttachment(params: JobTaskAddEmbeddedAttachmentParams, requestOptions?: any): IPromise<string>;
    /**
     * Adds a linked attachment to a job (url or file).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#addLinkedAttachment)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.attachmentType The type of attachment to be added.**Possible Values:** linked-file | url
     * @param params.path The file path to the attachment.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    addLinkedAttachment(params: JobTaskAddLinkedAttachmentParams, requestOptions?: any): IPromise<string>;
    /**
     * Adds a linked property record to a job's linked properties table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#addLinkedRecord)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.tableName The name of the table to which the record will be added.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    addLinkedRecord(params: JobTaskAddLinkedRecordParams, requestOptions?: any): IPromise<string>;
    /**
     * Assigns one or more jobs to a user or group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#assignJobs)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobIds An array of unique job Ids.
     * @param params.assignedType Indicates whether the job is assigned to a user, group or unassigned.   **Possible Values:** unassigned | user | group
     * @param params.assignedTo The name of the user or group to whom the job will be assigned.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    assignJobs(params: JobTaskAssignJobsParams, requestOptions?: any): IPromise<boolean>;
    /**
     * Closes one or more jobs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#closeJobs)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobIds An array of unique job Ids.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    closeJobs(params: JobTaskCloseJobsParams, requestOptions?: any): IPromise<boolean>;
    /**
     * Creates a job dependency.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#createDependency)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.heldOnType Indicates whether the current job (to which the dependency is being added) will be held at a step, stage or status.**Possible Values:** step | stage | status
     * @param params.heldOnValue The value of the step, stage or status at which the current job will be held.
     * @param params.depJobId The unique id of the job on which the current job will depend.
     * @param params.depOnType Indicates whether the current job (to which the dependency is being added) will be dependent on a step, stage or status of the other job.   **Possible Values:** step | stage | status
     * @param params.depOnValue The value of the step or status of the other job on which the current job will be dependent.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    createDependency(params: JobTaskCreateDependencyParams, requestOptions?: any): IPromise<string>;
    /**
     * Creates a job hold.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#createHold)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.holdTypeId The unique id representing the hold type to be placed on the job.
     * @param params.comments Reason or more detailed information regarding why the hold is being added.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    createHold(params: JobTaskCreateHoldParams, requestOptions?: any): IPromise<string>;
    /**
     * Creates new jobs based on the provided parameters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#createJobs)
     *
     * @param params The parameters to be used for job creation, parameters defined in the job type can be overwritten. The jobTypeId and user are required parameters when creating a job.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    createJobs(params: JobCreationParameters, requestOptions?: any): IPromise<string[]>;
    /**
     * Creates a version specific to the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#createJobVersion)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.name The name of the version to be created.
     * @param params.parent The name of the job's assigned geodatabase (data workspace) version, based on which the new version will be created.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    createJobVersion(params: JobTaskCreateJobVersionParams, requestOptions?: any): IPromise<string>;
    /**
     * Deletes an attachment from a job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#deleteAttachment)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.attachmentId The unique id of the attachment to be deleted.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    deleteAttachment(params: JobTaskDeleteAttachmentParams, requestOptions?: any): IPromise<boolean>;
    /**
     * Deletes a job dependency.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#deleteDependency)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.dependencyId The unique id of the dependency to be deleted.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    deleteDependency(params: JobTaskDeleteDependencyParams, requestOptions?: any): IPromise<boolean>;
    /**
     * Delete one or more jobs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#deleteJobs)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobIds An array of unique job Ids.
     * @param params.deleteHistory Indicates whether or not to delete the associated job history, the default is to delete job history.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    deleteJobs(params: JobTaskDeleteJobsParams, requestOptions?: any): IPromise<boolean>;
    /**
     * Deletes a record from a job's linked properties table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#deleteLinkedRecord)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.tableName The name of the table from which linked record will be deleted.
     * @param params.recordId The unique id of the record in the table.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    deleteLinkedRecord(params: JobTaskDeleteLinkedRecordParams, requestOptions?: any): IPromise<boolean>;
    /**
     * Gets the activity log for a job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#getActivityLog)
     *
     * @param jobId The unique id of the job.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getActivityLog(jobId: number, requestOptions?: any): IPromise<any[]>;
    /**
     * Gets the URL to access the file content of an embedded job attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#getAttachmentContentUrl)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.attachmentId The Id of the attachment to be retrieved.
     *
     */
    getAttachmentContentUrl(params: JobTaskGetAttachmentContentUrlParams): string;
    /**
     * Gets all the attachments associated with the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#getAttachments)
     *
     * @param jobId The unique id of the job.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getAttachments(jobId: number, requestOptions?: any): IPromise<JobAttachment>;
    /**
     * Gets an array of dependencies configured for a job. A job with a dependency is held at a step, stage or status of the other job, and cannot progress until the other job reaches the step, stage or status defined in the dependency. Once the other job reaches step, stage or status as defined in the dependency criteria the dependency is released and the dependent job can progress.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#getDependencies)
     *
     * @param jobId The unique id of the job.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getDependencies(jobId: number, requestOptions?: any): IPromise<JobDependency>;
    /**
     * Gets an array of [extended properties](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordContainer) for a job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#getExtendedProperties)
     *
     * @param jobId The unique id of the job.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getExtendedProperties(jobId: number, requestOptions?: any): IPromise<AuxRecordContainer>;
    /**
     * Gets an array of holds on a job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#getHolds)
     *
     * @param jobId The unique id of the job.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getHolds(jobId: number, requestOptions?: any): IPromise<any[]>;
    /**
     * Gets the [job](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo) object based on the given id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#getJob)
     *
     * @param jobId The unique id of the job to be retrieved.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getJob(jobId: number, requestOptions?: any): IPromise<JobTaskJobInfo>;
    /**
     * Gets all the job ids in the system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#getJobIds)
     *
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getJobIds(requestOptions?: any): IPromise<string[]>;
    /**
     * Gets the notes for a job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#getNotes)
     *
     * @param jobId The unique id of the job.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getNotes(jobId: number, requestOptions?: any): IPromise<string>;
    /**
     * Gets an array of [values and descriptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#FieldValue) for a geodatabase domain or table list extended property field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#listFieldValues)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.tableName The name of the extended property table.
     * @param params.field The field name of the extended property for which to retrieve values.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    listFieldValues(params: JobTaskListFieldValuesParams, requestOptions?: any): IPromise<FieldValue>;
    /**
     * Gets an array of [display values](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#FieldValue) for a given fields that comprisea multi-level table list extended property. As each display field is selected, for example using adropdown UI control, this method can be called to obtain a list of values to display in thesubsequent dropdown control.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#listMultiLevelFieldValues)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.field The name of the field.
     * @param params.previousSelectedValues The array of previous values, on which the current value is dependent on. For example, when selecting a city based on the state and county. The value for the state and county would be the previous values.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    listMultiLevelFieldValues(
      params: JobTaskListMultiLevelFieldValuesParams,
      requestOptions?: any
    ): IPromise<FieldValue>;
    /**
     * Logs an action in a job's activity log.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#logAction)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.activityTypeId The unique id representing the [activity type](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#ActivityType) of the action associated with this log record.
     * @param params.comments The comment that is added to the history.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    logAction(params: JobTaskLogActionParams, requestOptions?: any): IPromise<boolean>;
    /**
     * Queries the jobs using the queryId of an existing query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#queryJobs)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.queryId The unique id of a query, used to query jobs in the database.
     * @param params.user The username of the user who is requesting query.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    queryJobs(params: JobTaskQueryJobsParams, requestOptions?: any): IPromise<QueryResult>;
    /**
     * Queries the jobs using an ad-hoc query definition and gets the [query result](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#QueryResult).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#queryJobsAdHoc)
     *
     * @param params The [parameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobQueryParameters) to query jobs.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    queryJobsAdHoc(params: JobQueryParameters, requestOptions?: any): IPromise<QueryResult>;
    /**
     * Gets an array of string values representing the current display values for each display fieldin a multi-level table list extended property. The values from this method should be used to pre-selectitems in dropdown lists when initially displaying the extended properties of a job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#queryMultiLevelSelectedValues)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.field The name of the field.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    queryMultiLevelSelectedValues(
      params: JobTaskQueryMultiLevelSelectedValuesParams,
      requestOptions?: any
    ): IPromise<string[]>;
    /**
     * Releases a job hold.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#releaseHold)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.holdId The unique id of the hold.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    releaseHold(params: JobTaskReleaseHoldParams, requestOptions?: any): IPromise<boolean>;
    /**
     * Reopens one or more closed jobs. Supported from 10.3 onwards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#reopenClosedJobs)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobIds An array of unique job Ids.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    reopenClosedJobs(params: JobTaskReopenClosedJobsParams, requestOptions?: any): IPromise<boolean>;
    /**
     * Performs a freeform text search and returns a set of matching job records.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#searchJobs)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.text The text which will be used to perform the search.
     * @param params.user The username of the user who is requesting search.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    searchJobs(params: JobTaskSearchJobsParams, requestOptions?: any): IPromise<QueryResult>;
    /**
     * Unassigns one or more jobs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#unassignJobs)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobIds An array of unique job Ids.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    unassignJobs(params: JobTaskUnassignJobsParams, requestOptions?: any): IPromise<boolean>;
    /**
     * Update a job's properties.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#updateJob)
     *
     * @param params The [parameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobUpdateParameters) to be used for job properties update, the jobId and the user are required when updating jobs.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    updateJob(params: JobUpdateParameters, requestOptions?: any): IPromise<boolean>;
    /**
     * Updates the notes for a job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#updateNotes)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.notes The new notes for the job. Set to an empty (zero-length) string to clear the job notes.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    updateNotes(params: JobTaskUpdateNotesParams, requestOptions?: any): IPromise<boolean>;
    /**
     * Updates the values of an extended or linked properties record.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#updateRecord)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.record The record to be updated.
     * @param params.user The user name of the user who is requesting the change.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    updateRecord(params: JobTaskUpdateRecordParams, requestOptions?: any): IPromise<boolean>;
  }

  interface JobTaskConstructor {
    new (properties?: JobTaskProperties): JobTask;
  }

  export const JobTask: JobTaskConstructor;

  interface JobTaskProperties extends TaskProperties {
    /**
     * URL to the ArcGIS Workflow Manager REST service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#url)
     */
    url?: string;
  }

  /**
   * ActivityType represents an activity type template that gets logged on a job when a certain event is fired in the application.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#ActivityType)
   */
  export interface ActivityType extends Object {
    /**
     * The description of the activity being recorded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#ActivityType)
     */
    desription: string;
    /**
     * The unique id of the activity that is logged.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#ActivityType)
     */
    id: number;
    /**
     * The message that will be logged when this type of activity occurs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#ActivityType)
     */
    message: string;
    /**
     * The name of the activity that occurred.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#ActivityType)
     */
    name: string;
  }

  /**
   * AuxRecord represents the extended/linked properties record information associated with a job so that you can fetch or update the information for a specified record.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecord)
   */
  export interface AuxRecord extends Object {
    /**
     * The display value of the record.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecord)
     */
    displayProperty: any;
    /**
     * The unique id of the record.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecord)
     */
    id: number;
    /**
     * The array of the values in the [records](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordValue).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecord)
     */
    recordvalues: AuxRecordValue;
  }

  /**
   * AuxRecordContainer represents the extended/linked properties table characteristics.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordContainer)
   */
  export interface AuxRecordContainer extends Object {
    /**
     * The array of extended property [records](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecord).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordContainer)
     */
    records: AuxRecord;
    /**
     * The type of extended property relationship.   **Possible Values:** one-to-one | one-to-many
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordContainer)
     */
    relationshipType: string;
    /**
     * The table alias.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordContainer)
     */
    tableAlias: string;
    /**
     * The table name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordContainer)
     */
    tableName: string;
  }

  /**
   * AuxRecordDescription represents the type of value that is captured in a specific AuxRecord field. There are multiple data types supported in Workflow Manager like - file, folder, text, date, etc.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordDescription)
   */
  export interface AuxRecordDescription extends Object {
    /**
     * The array of property/value pairs of the record.
     *
     * [Read more...](properties.html)
     */
    properties: any;
    /**
     * The unique id of the record.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordDescription)
     */
    recordId: number;
    /**
     * The table name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordDescription)
     */
    tableName: string;
  }

  /**
   * AuxRecordValue represents the values of extended/linked properties associated with a job.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordValue)
   */
  export interface AuxRecordValue extends Object {
    /**
     * The filter to restrict the types of records supported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordValue)
     */
    filter: string;
    /**
     * The alias for the field in the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordValue)
     */
    alias: string;
    /**
     * The data contained in the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordValue)
     */
    data: any;
    /**
     * The type of data expected in the field.   **Possible Values:** small-integer | integer | single | double | string | date | oid | geometry | blob | raster | guid | global-id | xml
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordValue)
     */
    dataType: string;
    /**
     * The order each field is displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordValue)
     */
    displayOrder: number;
    /**
     * The type of extended property item.   **Possible Values:** default | text | date | domain | file | geo-file | folder | list | table-list | multi-level-table-list
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordValue)
     */
    displayType: string;
    /**
     * The domain value configured for the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordValue)
     */
    domain: string;
    /**
     * Indicates whether the extended property value can be updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordValue)
     */
    canUpdate: boolean;
    /**
     * The length of the property string.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordValue)
     */
    length: number;
    /**
     * The name property associated with the record.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordValue)
     */
    name: string;
    /**
     * Indicates whether the property is a required or optional field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordValue)
     */
    required: boolean;
    /**
     * The lookup table that contains the list of values which will be selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordValue)
     */
    tableListClass: string;
    /**
     * The field that will be displayed for the extended property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordValue)
     */
    tableListDisplayField: string;
    /**
     * The field that contains the value that gets stored as the extended property value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordValue)
     */
    tableListStoreField: string;
    /**
     * Indicates whether the value will be visible to the user or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#AuxRecordValue)
     */
    userVisible: boolean;
  }

  /**
   * FieldValue represents a single entry of a geodatabase domain or table list, applicable to constraining the values of an extended or linked property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#FieldValue)
   */
  export interface FieldValue extends Object {
    /**
     * The description of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#FieldValue)
     */
    description: string;
    /**
     * The value that is stored for the extended properties record.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#FieldValue)
     */
    value: any;
  }

  /**
   * JobAttachment represents an attachments associated with a job.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobAttachment)
   */
  export interface JobAttachment extends Object {
    /**
     * The name of the file attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobAttachment)
     */
    filename: string;
    /**
     * The file folder path or a URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobAttachment)
     */
    folder: string;
    /**
     * The unique id of the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobAttachment)
     */
    id: number;
    /**
     * The storage type of the attachment.   **Possible Values:** linked-file | embedded | url
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobAttachment)
     */
    storageType: string;
  }

  /**
   * JobCreationParameters provides information about the properties used for creating a job.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobCreationParameters)
   */
  export interface JobCreationParameters extends Object {
    /**
     * The geometry of the job's location of interest (LOI). Supported geometry types include point, multipoint and polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobCreationParameters)
     */
    loi: Geometry;
    /**
     * The name of the user or group to whom the job will be assigned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobCreationParameters)
     */
    assignedTo: string;
    /**
     * Indicates whether the workflow will be automatically committed upon creation of the job. The workflow cannot be edited after being committed to the system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobCreationParameters)
     */
    autoCommitWorkflow: boolean;
    /**
     * Indicates whether the job workflow will start execution automatically upon creation  of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobCreationParameters)
     */
    autoExecute: boolean;
    /**
     * The unique id of the data workspace of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobCreationParameters)
     */
    dataWorkspaceId: string;
    /**
     * The description of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobCreationParameters)
     */
    description: string;
    /**
     * The date on which the job is expected to be complete.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobCreationParameters)
     */
    dueDate: Date;
    /**
     * The unique id of the job type from which to create the new job from.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobCreationParameters)
     */
    jobTypeId: number;
    /**
     * Indicates whether the job is assigned to a user, group or unassigned.   **Possible Values:** unassigned | user | group
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobCreationParameters)
     */
    assignedType: string;
    /**
     * The name of the new job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobCreationParameters)
     */
    name: string;
    /**
     * The number of jobs to be created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobCreationParameters)
     */
    numJobs: string;
    /**
     * The name of the user that will own the job. Job ownership allows modification of job properties and not workflow execution.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobCreationParameters)
     */
    ownedBy: string;
    /**
     * The unique id of the job that will be designated as the parent job of the new job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobCreationParameters)
     */
    parentJobId: number;
    /**
     * The name of the geodatabase version that will be the parent version of the new job's version. By default it will be the parent version of the data workspace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobCreationParameters)
     */
    parentVersion: string;
    /**
     * The numeric value to denote priority of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobCreationParameters)
     */
    priority: number;
    /**
     * The date on which the job is scheduled to begin.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobCreationParameters)
     */
    startDate: Date;
    /**
     * The username of the user creating the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobCreationParameters)
     */
    user: string;
  }

  /**
   * JobDependency represents a dependency associated with a job.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobDependency)
   */
  export interface JobDependency extends Object {
    /**
     * The unique id of the job on which the current job depends.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobDependency)
     */
    depJobId: number;
    /**
     * Indicates whether the job is dependent on a step, stage or status of the other job.   **Possible Values:** step | stage | status
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobDependency)
     */
    depOnType: string;
    /**
     * The value of the step, stage or status of the other job on which the current job is dependent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobDependency)
     */
    depOnValue: string;
    /**
     * The value of the step, stage or status at which the current job will be held.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobDependency)
     */
    heldOnValue: number;
    /**
     * Indicates whether the job is held at a step, stage or status.   **Possible Values:** step | stage | status
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobDependency)
     */
    holdOnType: string;
    /**
     * The unique id of the dependency.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobDependency)
     */
    id: number;
    /**
     * The unique id of the job on which the dependency exists.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobDependency)
     */
    jobID: string;
  }

  /**
   * JobInfo represents a collection of job properties
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
   */
  export interface JobTaskJobInfo extends Object {
    /**
     * The name of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    name: string;
    /**
     * The name of the user or group to whom the job is assigned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    assignedTo: string;
    /**
     * An array of unique job ids designated as child jobs for the current job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    childJobIds: number[];
    /**
     * The user name of the person that created the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    createdBy: string;
    /**
     * The date the job was created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    createdDate: Date;
    /**
     * The unique id of the data workspace of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    dataWorkspaceId: string;
    /**
     * The description of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    description: string;
    /**
     * The date on which the job is expected to be complete.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    dueDate: Date;
    /**
     * The actual date the job's workflow was completed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    endDate: Date;
    /**
     * The unique id to identify the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    id: number;
    /**
     * The unique id of the job type whose instance is the current job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    jobTypeId: number;
    /**
     * The geometry of the job's location of interest (LOI). Supported geometry types include point, multipoint and polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    loi: Geometry;
    /**
     * Indicates whether the job is assigned to a user, group or unassigned.   **Possible Values:** unassigned | user | group
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    assignedType: string;
    /**
     * The name of the user that will own the job. Job ownership allows modification of job properties and not workflow execution.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    ownedBy: string;
    /**
     * The unique id of the job that will be designated as the parent job of the new job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    parentJobId: number;
    /**
     * The name of the geodatabase version that is the parent version of the job's version. By default it will be the parent version of the data workspace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    parentVersion: string;
    /**
     * The number of days that the job has been active.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    pendingDays: number;
    /**
     * The percentage of work completed on the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    percentageComplete: number;
    /**
     * The numeric value to denote priority of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    priority: number;
    /**
     * The internal stage of the job which corresponds to the status of the job.   **Possible Values:** created | ready | working | done | closed
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    stage: string;
    /**
     * The date on which the job is scheduled to begin.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    startDate: Date;
    /**
     * The numeric value to represent the current status of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    status: number;
    /**
     * Indicates whether a version exists for the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    versionExists: boolean;
    /**
     * The information about job's geodatabase version.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    versionInfo: JobVersionInfo;
    /**
     * The name of the job's geodatabase version.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobInfo)
     */
    versionName: string;
  }

  /**
   * JobQueryParameters is a full query definition of the selected query.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobQueryParameters)
   */
  export interface JobQueryParameters extends Object {
    /**
     * An alias of fields included in the select statement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobQueryParameters)
     */
    aliases: string;
    /**
     * An array of fields included in the select statement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobQueryParameters)
     */
    fields: string;
    /**
     * The field that will be used to order the results returned by the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobQueryParameters)
     */
    orderBy: string;
    /**
     * The tables that will be used in the where clause for selection.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobQueryParameters)
     */
    tables: string;
    /**
     * The where clause used as a filter for selecting job information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobQueryParameters)
     */
    where: string;
    /**
     * The username of the user who is requesting query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobQueryParameters)
     */
    user: string;
  }

  export interface JobTaskAddEmbeddedAttachmentParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#addEmbeddedAttachment)
     */
    jobId: number;
    /**
     * The form element that contains the file input control. The form parameter can be an instance of FormData. Using FormData you can send a "multipart/form-data" request to the server without having to create an HTML form element in markup. Note that the FormData api is not available in all browsers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#addEmbeddedAttachment)
     */
    form: any;
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#addEmbeddedAttachment)
     */
    user: string;
  }

  export interface JobTaskAddLinkedAttachmentParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#addLinkedAttachment)
     */
    jobId: number;
    /**
     * The type of attachment to be added.**Possible Values:** linked-file | url
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#addLinkedAttachment)
     */
    attachmentType: number;
    /**
     * The file path to the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#addLinkedAttachment)
     */
    path: string;
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#addLinkedAttachment)
     */
    user: string;
  }

  export interface JobTaskAddLinkedRecordParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#addLinkedRecord)
     */
    jobId: number;
    /**
     * The name of the table to which the record will be added.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#addLinkedRecord)
     */
    tableName: string;
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#addLinkedRecord)
     */
    user: string;
  }

  export interface JobTaskAssignJobsParams extends Object {
    /**
     * An array of unique job Ids.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#assignJobs)
     */
    jobIds: number[];
    /**
     * Indicates whether the job is assigned to a user, group or unassigned.   **Possible Values:** unassigned | user | group
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#assignJobs)
     */
    assignedType: string;
    /**
     * The name of the user or group to whom the job will be assigned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#assignJobs)
     */
    assignedTo: string;
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#assignJobs)
     */
    user: string;
  }

  export interface JobTaskCloseJobsParams extends Object {
    /**
     * An array of unique job Ids.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#closeJobs)
     */
    jobIds: number[];
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#closeJobs)
     */
    user: string;
  }

  export interface JobTaskCreateDependencyParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#createDependency)
     */
    jobId: number;
    /**
     * Indicates whether the current job (to which the dependency is being added) will be held at a step, stage or status.**Possible Values:** step | stage | status
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#createDependency)
     */
    heldOnType: string;
    /**
     * The value of the step, stage or status at which the current job will be held.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#createDependency)
     */
    heldOnValue: number;
    /**
     * The unique id of the job on which the current job will depend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#createDependency)
     */
    depJobId: number;
    /**
     * Indicates whether the current job (to which the dependency is being added) will be dependent on a step, stage or status of the other job.   **Possible Values:** step | stage | status
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#createDependency)
     */
    depOnType: string;
    /**
     * The value of the step or status of the other job on which the current job will be dependent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#createDependency)
     */
    depOnValue: number;
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#createDependency)
     */
    user: string;
  }

  export interface JobTaskCreateHoldParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#createHold)
     */
    jobId: number;
    /**
     * The unique id representing the hold type to be placed on the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#createHold)
     */
    holdTypeId: number;
    /**
     * Reason or more detailed information regarding why the hold is being added.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#createHold)
     */
    comments: string;
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#createHold)
     */
    user: string;
  }

  export interface JobTaskCreateJobVersionParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#createJobVersion)
     */
    jobId: number;
    /**
     * The name of the version to be created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#createJobVersion)
     */
    name: string;
    /**
     * The name of the job's assigned geodatabase (data workspace) version, based on which the new version will be created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#createJobVersion)
     */
    parent: string;
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#createJobVersion)
     */
    user: string;
  }

  export interface JobTaskDeleteAttachmentParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#deleteAttachment)
     */
    jobId: number;
    /**
     * The unique id of the attachment to be deleted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#deleteAttachment)
     */
    attachmentId: number;
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#deleteAttachment)
     */
    user: string;
  }

  export interface JobTaskDeleteDependencyParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#deleteDependency)
     */
    jobId: number;
    /**
     * The unique id of the dependency to be deleted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#deleteDependency)
     */
    dependencyId: number;
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#deleteDependency)
     */
    user: string;
  }

  export interface JobTaskDeleteJobsParams extends Object {
    /**
     * An array of unique job Ids.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#deleteJobs)
     */
    jobIds: number[];
    /**
     * Indicates whether or not to delete the associated job history, the default is to delete job history.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#deleteJobs)
     */
    deleteHistory?: boolean;
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#deleteJobs)
     */
    user: string;
  }

  export interface JobTaskDeleteLinkedRecordParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#deleteLinkedRecord)
     */
    jobId: number;
    /**
     * The name of the table from which linked record will be deleted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#deleteLinkedRecord)
     */
    tableName: string;
    /**
     * The unique id of the record in the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#deleteLinkedRecord)
     */
    recordId: number;
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#deleteLinkedRecord)
     */
    user: string;
  }

  export interface JobTaskGetAttachmentContentUrlParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#getAttachmentContentUrl)
     */
    jobId: number;
    /**
     * The Id of the attachment to be retrieved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#getAttachmentContentUrl)
     */
    attachmentId: number;
  }

  export interface JobTaskListFieldValuesParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#listFieldValues)
     */
    jobId: number;
    /**
     * The name of the extended property table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#listFieldValues)
     */
    tableName: string;
    /**
     * The field name of the extended property for which to retrieve values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#listFieldValues)
     */
    field: string;
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#listFieldValues)
     */
    user: string;
  }

  export interface JobTaskListMultiLevelFieldValuesParams extends Object {
    /**
     * The name of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#listMultiLevelFieldValues)
     */
    field: string;
    /**
     * The array of previous values, on which the current value is dependent on. For example, when selecting a city based on the state and county. The value for the state and county would be the previous values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#listMultiLevelFieldValues)
     */
    previousSelectedValues: string[];
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#listMultiLevelFieldValues)
     */
    user: string;
  }

  export interface JobTaskLogActionParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#logAction)
     */
    jobId: number;
    /**
     * The unique id representing the [activity type](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#ActivityType) of the action associated with this log record.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#logAction)
     */
    activityTypeId: number;
    /**
     * The comment that is added to the history.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#logAction)
     */
    comments: string;
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#logAction)
     */
    user: string;
  }

  export interface JobTaskQueryJobsParams extends Object {
    /**
     * The unique id of a query, used to query jobs in the database.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#queryJobs)
     */
    queryId: number;
    /**
     * The username of the user who is requesting query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#queryJobs)
     */
    user: string;
  }

  export interface JobTaskQueryMultiLevelSelectedValuesParams extends Object {
    /**
     * The name of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#queryMultiLevelSelectedValues)
     */
    field: string;
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#queryMultiLevelSelectedValues)
     */
    user: string;
  }

  export interface JobTaskReleaseHoldParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#releaseHold)
     */
    jobId: number;
    /**
     * The unique id of the hold.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#releaseHold)
     */
    holdId: number;
  }

  export interface JobTaskReopenClosedJobsParams extends Object {
    /**
     * An array of unique job Ids.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#reopenClosedJobs)
     */
    jobIds: number[];
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#reopenClosedJobs)
     */
    user: string;
  }

  export interface JobTaskSearchJobsParams extends Object {
    /**
     * The text which will be used to perform the search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#searchJobs)
     */
    text: string;
    /**
     * The username of the user who is requesting search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#searchJobs)
     */
    user: string;
  }

  export interface JobTaskUnassignJobsParams extends Object {
    /**
     * An array of unique job Ids.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#unassignJobs)
     */
    jobIds: number[];
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#unassignJobs)
     */
    user: string;
  }

  export interface JobTaskUpdateNotesParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#updateNotes)
     */
    jobId: number;
    /**
     * The new notes for the job. Set to an empty (zero-length) string to clear the job notes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#updateNotes)
     */
    notes: string;
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#updateNotes)
     */
    user: string;
  }

  export interface JobTaskUpdateRecordParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#updateRecord)
     */
    jobId: number;
    /**
     * The record to be updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#updateRecord)
     */
    record: AuxRecordDescription;
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#updateRecord)
     */
    user: string;
  }

  /**
   * JobUpdateParameters is a collection of properties that can be updated for jobs.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobUpdateParameters)
   */
  export interface JobUpdateParameters extends Object {
    /**
     * The name of the user that will own the job. Job ownership allows modification of job properties and not workflow execution.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobUpdateParameters)
     */
    ownedBy: string;
    /**
     * The name of the user or group to whom the job will be assigned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobUpdateParameters)
     */
    assignedTo: string;
    /**
     * The unique id of the data workspace of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobUpdateParameters)
     */
    dataWorkspaceId: string;
    /**
     * The description of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobUpdateParameters)
     */
    description: string;
    /**
     * The date on which the job is expected to be complete.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobUpdateParameters)
     */
    dueDate: Date;
    /**
     * The geometry of the job's location of interest (LOI). Supported geometry types include point, multipoint and polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobUpdateParameters)
     */
    loi: Geometry;
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobUpdateParameters)
     */
    jobId: number;
    /**
     * The name of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobUpdateParameters)
     */
    name: string;
    /**
     * Indicates whether the job is assigned to a user, group or unassigned.   **Possible Values:** unassigned | user | group
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobUpdateParameters)
     */
    assignedType: string;
    /**
     * The unique id of the job that will be designated as the parent job of the new job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobUpdateParameters)
     */
    parentJobId: number;
    /**
     * The name of the geodatabase version that will be the parent version of the new job's version. By default it will be the parent version of the data workspace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobUpdateParameters)
     */
    parentVersion: string;
    /**
     * The percentage of work completed on the job's current step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobUpdateParameters)
     */
    percent: number;
    /**
     * The numeric value to denote priority of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobUpdateParameters)
     */
    priority: number;
    /**
     * The date on which the job is scheduled to begin.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobUpdateParameters)
     */
    startDate: Date;
    /**
     * The unique id of the job's new status.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobUpdateParameters)
     */
    status: number;
    /**
     * The name of the geodatabase version to be used for the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobUpdateParameters)
     */
    versionName: string;
    /**
     * The user name of the user who is requesting the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobUpdateParameters)
     */
    user: string;
  }

  /**
   * JobVersionInfo represents a collection of properties for a job's version.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobVersionInfo)
   */
  export interface JobVersionInfo extends Object {
    /**
     * The unique id of the data workspace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobVersionInfo)
     */
    dataWorkspaceId: string;
    /**
     * The name of the data workspace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobVersionInfo)
     */
    name: string;
    /**
     * The parent version of the geodatabase.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobVersionInfo)
     */
    parent: string;
    /**
     * Indicates whether the version has been created or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobVersionInfo)
     */
    created: boolean;
    /**
     * The name of the version owner.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#JobVersionInfo)
     */
    owner: string;
  }

  /**
   * QueryFieldInfo represents a collection of field properties that are returned as part of a query.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#QueryFieldInfo)
   */
  export interface QueryFieldInfo extends Object {
    /**
     * The alias name of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#QueryFieldInfo)
     */
    alias: string;
    /**
     * The field length.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#QueryFieldInfo)
     */
    length: string;
    /**
     * The name of the data workspace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#QueryFieldInfo)
     */
    name: string;
    /**
     * The type of data expected in the field.   **Possible Values:** small-integer | integer | single | double | string | date | oid | geometry | blob | raster | guid | global-id | xml
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#QueryFieldInfo)
     */
    type: string;
  }

  /**
   * QueryResult contains the result of a query after it has been executed.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#QueryResult)
   */
  export interface QueryResult extends Object {
    /**
     * An array of fields and field properties in the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#QueryResult)
     */
    fields: QueryFieldInfo[];
    /**
     * The rows of results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-JobTask.html#QueryResult)
     */
    rows: string[];
  }

  interface NotificationTask extends Task {
    /**
     * URL to the ArcGIS Workflow Manager REST service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#url)
     */
    url: string;

    /**
     * Creates a new spatial notification change rule.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#addChangeRule)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.rule The [change rule](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRule) to be added.
     * @param params.user The username requesting the addition of the rule.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    addChangeRule(params: NotificationTaskAddChangeRuleParams, requestOptions?: any): IPromise<ChangeRule>;
    /**
     * Deletes a spatial notification change rule.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#deleteChangeRule)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.ruleId The unique id of the rule to be deleted.
     * @param params.user The username requesting the deletion of the rule.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    deleteChangeRule(params: NotificationTaskDeleteChangeRuleParams, requestOptions?: any): IPromise<boolean>;
    /**
     * Get an array of all the spatial notification [change rules](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRule) configured in the Workflow Manager system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#getAllChangeRules)
     *
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getAllChangeRules(requestOptions?: any): IPromise<ChangeRule>;
    /**
     * Get a single spatial notification [change rule](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRule) by ruleId.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#getChangeRule)
     *
     * @param ruleId The unique id of the [change rule](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRule).
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getChangeRule(ruleId: string, requestOptions?: any): IPromise<ChangeRule>;
    /**
     * Get information about a [match](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRuleMatch) for a change and change rule related to a spatial notification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#getChangeRuleMatch)
     *
     * @param matchId The unique id of the spatial notification match.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getChangeRuleMatch(matchId: string, requestOptions?: any): IPromise<ChangeRule>;
    /**
     * Get the current time of the database.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#getDatabaseTime)
     *
     * @param dataWorkspaceId The unique id of the dataWorkspace.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getDatabaseTime(dataWorkspaceId: string, requestOptions?: any): IPromise<Date>;
    /**
     * Get an array of [matches](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRuleMatch) that match the change rule criteria in a specific editing session.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#getSessionMatches)
     *
     * @param sessionId The unique id of the spatial notification session.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getSessionMatches(sessionId: string, requestOptions?: any): IPromise<ChangeRuleMatch>;
    /**
     * Sends the notifications configured for the matches found during a rule evaluation session.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#notifySession)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.sessionid The unique id of the spatial notification session.
     * @param params.deleteAfter Indicates whether to delete the session matches after sending any notifications. The default is false.
     * @param params.user The username requesting the sending of notification.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    notifySession(params: NotificationTaskNotifySessionParams, requestOptions?: any): IPromise<boolean>;
    /**
     * Queries the array of spatial notification [change rules](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRule) based on specified criteria.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#queryChangeRules)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.name A search string to find within change rule names.
     * @param params.description A search string to find within change rule descriptions.
     * @param params.searchType The type of search to perform, default is contains.   **Possible Values:** contains | exact | starts-with | ends-with
     * @param params.user The username requesting the search.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    queryChangeRules(params: NotificationTaskQueryChangeRulesParams, requestOptions?: any): IPromise<ChangeRule>;
    /**
     * Executes the configured spatial notification change rules on a data workspace by evaluating the geodatabase archive.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#runSpatialNotificationOnHistory)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.dataWorkspaceId The unique id of the dataWorkspace.
     * @param params.from The starting time to query for new changes.
     * @param params.to The ending time to query for new changes.
     * @param params.logMatches Indicates whether to keep the matches found, stored in the ArcGIS Workflow Manager repository. The default is false.
     * @param params.send Indicates whether to the send notifications at the time matches are found. The default is false.
     * @param params.user The username requesting the execution of the rule.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    runSpatialNotificationOnHistory(
      params: NotificationTaskRunSpatialNotificationOnHistoryParams,
      requestOptions?: any
    ): IPromise<string>;
    /**
     * Sends an email of the specified [notification type](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#NotificationType).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#sendNotification)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.notificationType The name of the [notification type](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#NotificationType) to be sent.
     * @param params.user The username requesting to send the notification.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    sendNotification(params: NotificationTaskSendNotificationParams, requestOptions?: any): IPromise<boolean>;
    /**
     * Adds an email address to the subscriber list for a specific notification type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#subscribeToNotification)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.notificationTypeId The unique id of the notification type to which the email address will be added.
     * @param params.email The email address to add to the notification type's subscriber list. May contain tokens.
     * @param params.user The username requesting the addition of email address to the notification subscriber's list.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    subscribeToNotification(
      params: NotificationTaskSubscribeToNotificationParams,
      requestOptions?: any
    ): IPromise<boolean>;
    /**
     * Removes an email address from the subscriber list for a specific notification type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#unsubscribeFromNotification)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.notificationTypeId The unique id of the notification type from which the email address will be removed.
     * @param params.email The email address to remove from the notification type's subscriber list. May contain tokens.
     * @param params.user The username requesting the removal of email address to the notification subscriber's list.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    unsubscribeFromNotification(
      params: NotificationTaskUnsubscribeFromNotificationParams,
      requestOptions?: any
    ): IPromise<boolean>;
  }

  interface NotificationTaskConstructor {
    new (properties?: NotificationTaskProperties): NotificationTask;
  }

  export const NotificationTask: NotificationTaskConstructor;

  interface NotificationTaskProperties extends TaskProperties {
    /**
     * URL to the ArcGIS Workflow Manager REST service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#url)
     */
    url?: string;
  }

  /**
   * AOIEvaluator represents the rules that triggers a spatial notification based on area of interest(AOI). This contains the geometric operation and the criteria to be used based on the AOI.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#AOIEvaluator)
   */
  export interface AOIEvaluator extends Object {
    /**
     * The area of interest.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#AOIEvaluator)
     */
    aoi: Polygon;
    /**
     * Indicates whether to inverse the spatial relationship or not. For example, if the spatial relationship is inversed for operator Within, then features that are not within will be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#AOIEvaluator)
     */
    inverse: boolean;
    /**
     * The name of the AOI evaluator.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#AOIEvaluator)
     */
    name: string;
    /**
     * The spatial relationship to be applied for evaluation of the rule.   **Possible Values:** intersects | contains | crosses | envelope-intersects | index-intersects | overlaps | touches | within | relation
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#AOIEvaluator)
     */
    relation: string;
    /**
     * The type of the AOI evaluator.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#AOIEvaluator)
     */
    type: string;
    /**
     * Indicates whether job AOI should be used as the extent or not for the evaluation of the rule.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#AOIEvaluator)
     */
    useJobAOI: boolean;
  }

  /**
   * ChangeRule represents a single change rule that triggers a spatial notification. When the criteria defined in the rule is met an email notification is sent to recipients.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRule)
   */
  export interface ChangeRule extends Object {
    /**
     * The description of the change rule.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRule)
     */
    description: string;
    /**
     * An array of [AOI](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#AOIEvaluator) and [Dataset](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#DataSetEvaluator) evaluators.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRule)
     */
    evaluators: any[];
    /**
     * The unique id of the change rule.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRule)
     */
    id: number;
    /**
     * The name of the change rule.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRule)
     */
    name: string;
    /**
     * The type of notifier, the default is [email notifier](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#EmailNotifier). This can be extended to use your own notifiers like SMS, instant messaging.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRule)
     */
    notifier: any;
    /**
     * Indicates whether to summarize email contents or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRule)
     */
    summarize: boolean;
  }

  /**
   * ChangeRuleMatch represents information about the change and change rule related to a spatial notification match.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRuleMatch)
   */
  export interface ChangeRuleMatch extends Object {
    /**
     * The time the change occurred to the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRuleMatch)
     */
    changeTime: Date;
    /**
     * The type of change that happened to the data.   **Possible Values:** add | modify | delete | all
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRuleMatch)
     */
    changeType: string;
    /**
     * The dataset that changed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRuleMatch)
     */
    dataset: string;
    /**
     * The unique id of the data workspace containing the changed data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRuleMatch)
     */
    dataWorkspaceId: string;
    /**
     * The unique id of the associated to the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRuleMatch)
     */
    id: string;
    /**
     * The unique id of the job where the change was made.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRuleMatch)
     */
    jobID: string;
    /**
     * The unique id of the change rule.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRuleMatch)
     */
    ruleID: string;
  }

  /**
   * DatasetConfiguration represents the criteria and dataset that the change rule applies to.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#DatasetConfiguration)
   */
  export interface DatasetConfiguration extends Object {
    /**
     * This indicates whether the notification will be sent always or if values change to defined in whereConditions or if values change from defined in whereConditions.   **Possible Values:** always | changed-to | changed-from
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#DatasetConfiguration)
     */
    changeCondition: number;
    /**
     * The name of the fields, changes to which trigger the notification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#DatasetConfiguration)
     */
    changeFields: string;
    /**
     * The name of the dataset that will trigger the notification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#DatasetConfiguration)
     */
    dataset: string;
    /**
     * The unique id of the data workspace containing the changed data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#DatasetConfiguration)
     */
    dataWorkspaceId: string;
    /**
     * The name of the dataset configuration rule.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#DatasetConfiguration)
     */
    name: string;
    /**
     * The [where conditions](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#WhereCondition) defining the criteria to trigger the rule.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#DatasetConfiguration)
     */
    whereConditions: WhereCondition[];
  }

  /**
   * DataSetEvaluator represents the rules that triggers a spatial notification based on the changes in a dataset. This contains the specific features and feature class that are participating in a spatial notification rule.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#DataSetEvaluator)
   */
  export interface DataSetEvaluator extends Object {
    /**
     * The array of [DatasetConfigurations](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#DatasetConfiguration) representing the dataset to which the rule applies.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#DataSetEvaluator)
     */
    dataSetConfigurations: DatasetConfiguration[];
    /**
     * The name of the dataset evaluator.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#DataSetEvaluator)
     */
    name: string;
    /**
     * The type of the dataset evaluator.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#DataSetEvaluator)
     */
    type: string;
  }

  /**
   * EmailNotifier represents the properties of a notification type that is configured in the Workflow Manager system.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#EmailNotifier)
   */
  export interface EmailNotifier extends Object {
    /**
     * Indicates whether the job's file attachment will be attached to the email.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#EmailNotifier)
     */
    attachJobAttachments: boolean;
    /**
     * The message content sent as part of the email.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#EmailNotifier)
     */
    message: string;
    /**
     * The name of the notifier.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#EmailNotifier)
     */
    name: string;
    /**
     * The sender's (from) email address.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#EmailNotifier)
     */
    senderEmail: string;
    /**
     * The sender's (from) name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#EmailNotifier)
     */
    senderName: string;
    /**
     * The subject of the email.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#EmailNotifier)
     */
    subject: string;
    /**
     * The array of subscribers who will get the email.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#EmailNotifier)
     */
    subscribers: string[];
    /**
     * The type of notifier.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#EmailNotifier)
     */
    type: string;
  }

  export interface NotificationTaskAddChangeRuleParams extends Object {
    /**
     * The [change rule](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#ChangeRule) to be added.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#addChangeRule)
     */
    rule: ChangeRule;
    /**
     * The username requesting the addition of the rule.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#addChangeRule)
     */
    user: string;
  }

  export interface NotificationTaskDeleteChangeRuleParams extends Object {
    /**
     * The unique id of the rule to be deleted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#deleteChangeRule)
     */
    ruleId: string;
    /**
     * The username requesting the deletion of the rule.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#deleteChangeRule)
     */
    user: string;
  }

  export interface NotificationTaskNotifySessionParams extends Object {
    /**
     * The unique id of the spatial notification session.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#notifySession)
     */
    sessionid: string;
    /**
     * Indicates whether to delete the session matches after sending any notifications. The default is false.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#notifySession)
     */
    deleteAfter: boolean;
    /**
     * The username requesting the sending of notification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#notifySession)
     */
    user: string;
  }

  export interface NotificationTaskQueryChangeRulesParams extends Object {
    /**
     * A search string to find within change rule names.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#queryChangeRules)
     */
    name: string;
    /**
     * A search string to find within change rule descriptions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#queryChangeRules)
     */
    description: string;
    /**
     * The type of search to perform, default is contains.   **Possible Values:** contains | exact | starts-with | ends-with
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#queryChangeRules)
     */
    searchType: string;
    /**
     * The username requesting the search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#queryChangeRules)
     */
    user: string;
  }

  export interface NotificationTaskRunSpatialNotificationOnHistoryParams extends Object {
    /**
     * The unique id of the dataWorkspace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#runSpatialNotificationOnHistory)
     */
    dataWorkspaceId: string;
    /**
     * The starting time to query for new changes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#runSpatialNotificationOnHistory)
     */
    from: Date;
    /**
     * The ending time to query for new changes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#runSpatialNotificationOnHistory)
     */
    to: Date;
    /**
     * Indicates whether to keep the matches found, stored in the ArcGIS Workflow Manager repository. The default is false.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#runSpatialNotificationOnHistory)
     */
    logMatches: boolean;
    /**
     * Indicates whether to the send notifications at the time matches are found. The default is false.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#runSpatialNotificationOnHistory)
     */
    send: boolean;
    /**
     * The username requesting the execution of the rule.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#runSpatialNotificationOnHistory)
     */
    user: string;
  }

  export interface NotificationTaskSendNotificationParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#sendNotification)
     */
    jobId: number;
    /**
     * The name of the [notification type](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#NotificationType) to be sent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#sendNotification)
     */
    notificationType: string;
    /**
     * The username requesting to send the notification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#sendNotification)
     */
    user: string;
  }

  export interface NotificationTaskSubscribeToNotificationParams extends Object {
    /**
     * The unique id of the notification type to which the email address will be added.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#subscribeToNotification)
     */
    notificationTypeId: number;
    /**
     * The email address to add to the notification type's subscriber list. May contain tokens.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#subscribeToNotification)
     */
    email: string;
    /**
     * The username requesting the addition of email address to the notification subscriber's list.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#subscribeToNotification)
     */
    user: string;
  }

  export interface NotificationTaskUnsubscribeFromNotificationParams extends Object {
    /**
     * The unique id of the notification type from which the email address will be removed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#unsubscribeFromNotification)
     */
    notificationTypeId: number;
    /**
     * The email address to remove from the notification type's subscriber list. May contain tokens.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#unsubscribeFromNotification)
     */
    email: string;
    /**
     * The username requesting the removal of email address to the notification subscriber's list.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#unsubscribeFromNotification)
     */
    user: string;
  }

  /**
   * NotificationType represents the properties of a notification type that are sent when certain events happen in the Workflow Manager system.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#NotificationType)
   */
  export interface NotificationType extends Object {
    /**
     * Indicates whether the job's file attachment will be attached to the email.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#NotificationType)
     */
    attachJobAttachments: boolean;
    /**
     * The unique id of the notification type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#NotificationType)
     */
    id: number;
    /**
     * The message content sent as part of the email.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#NotificationType)
     */
    message: string;
    /**
     * The sender's (from) email address.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#NotificationType)
     */
    senderEmail: string;
    /**
     * The sender's (from) name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#NotificationType)
     */
    senderName: string;
    /**
     * The subject of the email.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#NotificationType)
     */
    subject: string;
    /**
     * The array of subscribers who will get the email.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#NotificationType)
     */
    subscribers: string[];
    /**
     * The type of notifier.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#NotificationType)
     */
    type: string;
  }

  /**
   * WhereCondition returns the condition set in [DatasetConfiguration](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#DatasetConfiguration) for a [Dataset](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#DataSetEvaluator) evaluator.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#WhereCondition)
   */
  export interface WhereCondition extends Object {
    /**
     * The value to be compared/evaluated with.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#WhereCondition)
     */
    compareValue: any;
    /**
     * The field name that contains the value to be compared.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#WhereCondition)
     */
    field: string;
    /**
     * The operator to be used for comparison.   **Possible Values:** equal | not-equal | greater-than | greater-or-equal | less-than | less-or-equal | contains
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-NotificationTask.html#WhereCondition)
     */
    operator: string;
  }

  interface ReportTask extends Task {
    /**
     * URL to the ArcGIS Workflow Manager REST service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#url)
     */
    url: string;

    /**
     * Generates a report and returns the output as formatted HTML.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#generateReport)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.reportId The id of the report.
     * @param params.user The user name requesting the report.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    generateReport(params: ReportTaskGenerateReportParams, requestOptions?: any): IPromise<string>;
    /**
     * Gets all the [reports](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#Report) that are configured in the Workflow Manager system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#getAllReports)
     *
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getAllReports(requestOptions?: any): IPromise<Report>;
    /**
     * Returns the URL string for the report content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#getReportContentUrl)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.reportId The id of the report.
     * @param params.user The username of the user requesting the report content.
     *
     */
    getReportContentUrl(params: ReportTaskGetReportContentUrlParams): string;
    /**
     * Executes a report and returns the raw [report data](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#ReportData).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#getReportData)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.reportId The id of the report.
     * @param params.user The username of the user requesting the report data.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getReportData(params: ReportTaskGetReportDataParams, requestOptions?: any): IPromise<ReportData>;
    /**
     * Gets the XSLT stylesheet for the specified report.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#getReportStylesheet)
     *
     * @param reportId The id of the report.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getReportStylesheet(reportId: number, requestOptions?: any): IPromise<string>;
  }

  interface ReportTaskConstructor {
    new (properties?: ReportTaskProperties): ReportTask;
  }

  export const ReportTask: ReportTaskConstructor;

  interface ReportTaskProperties extends TaskProperties {
    /**
     * URL to the ArcGIS Workflow Manager REST service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#url)
     */
    url?: string;
  }

  /**
   * Report represents a configured report in the Workflow Manager system.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#Report)
   */
  export interface Report extends Object {
    /**
     * A description of the report.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#Report)
     */
    description: string;
    /**
     * The category to which the report belongs in the system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#Report)
     */
    hierarchy: string;
    /**
     * A unique id for the report.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#Report)
     */
    id: number;
    /**
     * The name of the report.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#Report)
     */
    name: string;
    /**
     * The title of the report.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#Report)
     */
    title: string;
  }

  /**
   * ReportData is the generated result of a report after it has been executed.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#ReportData)
   */
  export interface ReportData extends Object {
    /**
     * The name of columns returned as part of the report.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#ReportData)
     */
    columns: string[];
    /**
     * A description of the report.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#ReportData)
     */
    description: string;
    /**
     * The [aggregation of the report data](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#ReportDataGroup) into subcategories.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#ReportData)
     */
    groups: ReportDataGroup[];
    /**
     * The title of the report.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#ReportData)
     */
    title: string;
  }

  /**
   * ReportDataGroup aggregates the report results into user defined categories.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#ReportDataGroup)
   */
  export interface ReportDataGroup extends Object {
    /**
     * The label of the aggregate category as defined in the report, eg. Total Jobs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#ReportDataGroup)
     */
    aggregateLabel: string;
    /**
     * The value of the aggregate category based on the calculation defined in the report section options.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#ReportDataGroup)
     */
    aggregateValue: string;
    /**
     * The rows containing the data returned in the report.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#ReportDataGroup)
     */
    row: string[];
    /**
     * The data value based on which the section is created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#ReportDataGroup)
     */
    value: string;
  }

  export interface ReportTaskGenerateReportParams extends Object {
    /**
     * The id of the report.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#generateReport)
     */
    reportId: number;
    /**
     * The user name requesting the report.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#generateReport)
     */
    user: string;
  }

  export interface ReportTaskGetReportContentUrlParams extends Object {
    /**
     * The id of the report.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#getReportContentUrl)
     */
    reportId: number;
    /**
     * The username of the user requesting the report content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#getReportContentUrl)
     */
    user: number;
  }

  export interface ReportTaskGetReportDataParams extends Object {
    /**
     * The id of the report.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#getReportData)
     */
    reportId: number;
    /**
     * The username of the user requesting the report data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-ReportTask.html#getReportData)
     */
    user: string;
  }

  interface TokenTask extends Task {
    /**
     * Parses a string with embedded tokens using user and job information. The string is returned with embedded tokens replaced by their actual values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-TokenTask.html#parseTokens)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId A unique id for the job.
     * @param params.stringToParse The string representing the tokens to be parsed.
     * @param params.user The username of the user requesting token parsing.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    parseTokens(params: TokenTaskParseTokensParams, requestOptions?: any): IPromise<string>;
  }

  interface TokenTaskConstructor {
    new (properties?: TokenTaskProperties): TokenTask;
  }

  export const TokenTask: TokenTaskConstructor;

  interface TokenTaskProperties extends TaskProperties {}

  export interface TokenTaskParseTokensParams extends Object {
    /**
     * A unique id for the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-TokenTask.html#parseTokens)
     */
    jobId: any;
    /**
     * The string representing the tokens to be parsed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-TokenTask.html#parseTokens)
     */
    stringToParse: string;
    /**
     * The username of the user requesting token parsing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-TokenTask.html#parseTokens)
     */
    user: string;
  }

  interface WorkflowTask extends Task {
    /**
     * URL to the ArcGIS Workflow Manager REST service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#url)
     */
    url: string;

    /**
     * Get the information which indicates whether this workflow step can be run.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#canRunStep)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.stepId The unique id of the step.
     * @param params.user The user name of the user wanting to run the step.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    canRunStep(params: WorkflowTaskCanRunStepParams, requestOptions?: any): IPromise<string>;
    /**
     * Executes the specified steps in order and gets back [execution information](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#ExecuteInfo) of the steps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#executeSteps)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.stepIds The array of unique step Ids.
     * @param params.auto Indicates whether to automatically execute as many steps as possible, based on the workflow configuration. The default is false, to execute only the current step.
     * @param params.user The user name of the user executing the step.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    executeSteps(params: WorkflowTaskExecuteStepsParams, requestOptions?: any): IPromise<ExecuteInfo>;
    /**
     * Gets all workflow [steps](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step) of a job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#getAllSteps)
     *
     * @param jobId The unique id of the job.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getAllSteps(jobId: number, requestOptions?: any): IPromise<Step>;
    /**
     * Gets all current [steps](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step) of a job. A workflow will have more than one current step if it is configured to support parallel steps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#getCurrentSteps)
     *
     * @param jobId The unique id of the job.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getCurrentSteps(jobId: number, requestOptions?: any): IPromise<Step>;
    /**
     * Gets a specific workflow [step](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step) of a job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#getStep)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.stepId The unique id of the step.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getStep(params: WorkflowTaskGetStepParams, requestOptions?: any): IPromise<Step>;
    /**
     * Get the help associated with a workflow step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#getStepDescription)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.stepId The unique id of the step.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getStepDescription(params: WorkflowTaskGetStepDescriptionParams, requestOptions?: any): IPromise<string>;
    /**
     * Gets a URL to access the file content of a file step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#getStepFileUrl)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.stepId The unique id of the step.
     *
     */
    getStepFileUrl(params: WorkflowTaskGetStepFileUrlParams): string;
    /**
     * Get a job's [workflow display details](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowDisplayDetails).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#getWorkflowDisplayDetails)
     *
     * @param jobId The unique id of the job.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    getWorkflowDisplayDetails(jobId: number, requestOptions?: any): IPromise<WorkflowDisplayDetails>;
    /**
     * Gets a URL of an image depicting the current state of a job's workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#getWorkflowImageUrl)
     *
     * @param jobId The unique id of the job.
     *
     */
    getWorkflowImageUrl(jobId: number): string;
    /**
     * Marks the specified steps of a job workflow as completed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#markStepsAsDone)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.stepIds The array of unique step Ids.
     * @param params.user The user name of the user marking the step complete.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    markStepsAsDone(params: WorkflowTaskMarkStepsAsDoneParams, requestOptions?: any): IPromise<ExecuteInfo>;
    /**
     * Advances the workflow to the next step based on a return code value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#moveToNextStep)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job Id.
     * @param params.stepId The unique id of the step.
     * @param params.returnCode A numeric value representing the return code.
     * @param params.user The user name of the user advancing the workflow to the next step.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    moveToNextStep(params: WorkflowTaskMoveToNextStepParams, requestOptions?: any): IPromise<boolean>;
    /**
     * The job workflow is updated with the latest workflow of job type, after the job has been created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#recreateWorkflow)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.user The user name of the user recreating the workflow.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    recreateWorkflow(params: WorkflowTaskRecreateWorkflowParams, requestOptions?: any): IPromise<boolean>;
    /**
     * Resolves workflow path conflicts resulting from executing or marking as complete a step, which can have two or more next steps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#resolveConflict)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.stepId The unique id of the step.
     * @param params.optionReturnCode A numeric value representing the return code from the step where the conflict was encountered.
     * @param params.optionStepIds An array of unique step IDs of all the possible next steps.
     * @param params.user The user name of the user resolving the conflict.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    resolveConflict(params: WorkflowTaskResolveConflictParams, requestOptions?: any): IPromise<boolean>;
    /**
     * Sets a step as the current active step of a job workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#setCurrentStep)
     *
     * @param params See the object specifications in table below for the structure of the `params` object.
     * @param params.jobId The unique id of the job.
     * @param params.stepId The unique id of the step.
     * @param params.user The user name of the user setting the current step.
     * @param requestOptions Additional [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)to be used for the data request (will override requestOptions defined during construction).
     *
     */
    setCurrentStep(params: WorkflowTaskSetCurrentStepParams, requestOptions?: any): IPromise<boolean>;
  }

  interface WorkflowTaskConstructor {
    new (properties?: WorkflowTaskProperties): WorkflowTask;
  }

  export const WorkflowTask: WorkflowTaskConstructor;

  interface WorkflowTaskProperties extends TaskProperties {
    /**
     * URL to the ArcGIS Workflow Manager REST service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#url)
     */
    url?: string;
  }

  /**
   * ExecuteInfo provides information on whether a step can be executed.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#ExecuteInfo)
   */
  export interface ExecuteInfo extends Object {
    /**
     * Information about [conflicts](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowConflicts) in workflow step progression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#ExecuteInfo)
     */
    conflicts: WorkflowConflicts;
    /**
     * The error code returned by the steps in the workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#ExecuteInfo)
     */
    errorCode: number;
    /**
     * The description for the errors returned by the steps in the workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#ExecuteInfo)
     */
    errorDescription: string;
    /**
     * The result of a step execution.   **Possible Values:** executed | dependent-on-step | dependent-on-stage | dependent-on-status | job-on-hold | step-depends-on-step | check | step-assigned-to-other-user | step-assigned-to-other-group | job-assigned-to-others | job-closed | invalid-platform | invalid-step | dependent-on-job | not-current-step
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#ExecuteInfo)
     */
    executionResult: string;
    /**
     * Indicates whether a step has conflicts.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#ExecuteInfo)
     */
    hasConflicts: boolean;
    /**
     * Indicates whether a step has return code.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#ExecuteInfo)
     */
    hasReturnCode: boolean;
    /**
     * The unique id of current job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#ExecuteInfo)
     */
    jobID: number;
    /**
     * The return code for the current workflow step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#ExecuteInfo)
     */
    returnCode: number;
    /**
     * The unique id of the current step in the workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#ExecuteInfo)
     */
    stepID: number;
    /**
     * Indicates whether the step threw an error during execution.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#ExecuteInfo)
     */
    threwError: boolean;
  }

  /**
   * Step represents the properties of a step that is used in a job's workflow.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step)
   */
  export interface Step extends Object {
    /**
     * Indicates whether the step has already been executed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step)
     */
    hasBeenExecuted: boolean;
    /**
     * The user or group to whom the step is assigned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step)
     */
    assignedTo: string;
    /**
     * Indicates whether the step can be run asynchronously.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step)
     */
    async: boolean;
    /**
     * Indicates whether the step can be automatically executed when reached.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step)
     */
    autoRun: boolean;
    /**
     * Indicates whether the step can be skipped without executing it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step)
     */
    canSkip: boolean;
    /**
     * Indicates whether the step can start parallel execution of other steps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step)
     */
    canSpawnConcurrency: boolean;
    /**
     * The unique id of step type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step)
     */
    commonId: number;
    /**
     * The default percentage completion of the job once step is reached.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step)
     */
    defaultPercentComplete: number;
    /**
     * Indicates whether the job is assigned to a user, group or unassigned.   **Possible Values:** none | unassigned | user | group
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step)
     */
    assignedType: string;
    /**
     * Indicates whether the step has been started.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step)
     */
    hasBeenStarted: boolean;
    /**
     * The unique id generated as the step Id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step)
     */
    id: number;
    /**
     * The name of the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step)
     */
    name: string;
    /**
     * Indicates whether the step will be automatically marked as complete when complete.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step)
     */
    selfCheck: boolean;
    /**
     * The unique numeric status value configured as the status of the job once step is reached.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step)
     */
    statusId: number;
    /**
     * The percentage completion of the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step)
     */
    stepPercentComplete: number;
    /**
     * The type of notification that will be sent when the step finishes execution.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step)
     */
    notificationType: string;
    /**
     * The [step template](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#StepType) for current step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#Step)
     */
    stepType: StepType;
  }

  /**
   * StepType represents properties of step templates that are available in the Workflow Manager system for authoring workflows.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#StepType)
   */
  export interface StepType extends Object {
    /**
     * The program/application/code that will be executed on this step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#StepType)
     */
    program: string;
    /**
     * The step arguments required at runtime.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#StepType)
     */
    arguments: string;
    /**
     * The type of execution for the step.   **Possible Values:** executable | function | procedural | launch-url | question | open-file
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#StepType)
     */
    executionType: string;
    /**
     * The unique id for the step type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#StepType)
     */
    id: number;
    /**
     * The name of the step type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#StepType)
     */
    name: string;
    /**
     * The description of the step type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#StepType)
     */
    description: string;
    /**
     * The path/URL of the step description.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#StepType)
     */
    stepDescriptionLink: string;
    /**
     * The type of step description.   **Possible Values:** none | embedded-html | link
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#StepType)
     */
    stepDescriptionType: string;
    /**
     * The shape of the step as it will appear in a workflow graphic.   **Possible Values:** rounded-rectangle | rectangle | oval | diamond | parallelogram
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#StepType)
     */
    stepIndicatorType: string;
    /**
     * The platform on which the step can be executed.   **Possible Values:** desktop | server | both
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#StepType)
     */
    supportedPlatform: string;
    /**
     * Indicates whether Workflow Manager will be minimized and hidden during step execution.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#StepType)
     */
    visible: boolean;
  }

  /**
   * WorkflowAnnotationDisplayDetails represents properties of a workflow annotation.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowAnnotationDisplayDetails)
   */
  export interface WorkflowAnnotationDisplayDetails extends Object {
    /**
     * The X coordinate of the annotation object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowAnnotationDisplayDetails)
     */
    centerX: number;
    /**
     * The Y coordinate of the annotation object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowAnnotationDisplayDetails)
     */
    centerY: number;
    /**
     * The fill color of the annotation object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowAnnotationDisplayDetails)
     */
    fillColor: Color;
    /**
     * The height of the annotation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowAnnotationDisplayDetails)
     */
    height: number;
    /**
     * The annotation text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowAnnotationDisplayDetails)
     */
    label: string;
    /**
     * The color of annotation label text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowAnnotationDisplayDetails)
     */
    labelColor: Color;
    /**
     * The outline color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowAnnotationDisplayDetails)
     */
    OutlineColor: Color;
    /**
     * The width of the annotation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowAnnotationDisplayDetails)
     */
    width: number;
  }

  /**
   * WorkflowConflicts represents properties for workflows that have a conflicting path or multiple possible paths for progression.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowConflicts)
   */
  export interface WorkflowConflicts extends Object {
    /**
     * The unique id of currently active job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowConflicts)
     */
    jobID: number;
    /**
     * The information about the step in the workflow returned as [WorkflowOption](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowOption).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowConflicts)
     */
    options: WorkflowOption[];
    /**
     * Indicates whether the step will begin a concurrent path in the workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowConflicts)
     */
    spawnsConcurrency: boolean;
    /**
     * The unique id of the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowConflicts)
     */
    stepId: number;
  }

  /**
   * WorkflowDisplayDetails represents a collection of properties that constitute a workflow - annotations, steps, and paths.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowDisplayDetails)
   */
  export interface WorkflowDisplayDetails extends Object {
    /**
     * The properties of how the [annotations are displayed](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowAnnotationDisplayDetails).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowDisplayDetails)
     */
    annotations: WorkflowAnnotationDisplayDetails[];
    /**
     * The properties of how the [path are displayed](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowPathDisplayDetails).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowDisplayDetails)
     */
    paths: WorkflowPathDisplayDetails[];
    /**
     * The properties of how the [step are displayed](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowStepDisplayDetails).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowDisplayDetails)
     */
    steps: WorkflowStepDisplayDetails[];
  }

  /**
   * WorkflowOption represents properties of a workflow that have return codes and step branches.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowOption)
   */
  export interface WorkflowOption extends Object {
    /**
     * The return code generated from a step execution.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowOption)
     */
    returnCode: number;
    /**
     * The collection of [descriptions for workflow steps](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowStepInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowOption)
     */
    steps: WorkflowStepInfo[];
  }

  /**
   * WorkflowPathDisplayDetails represents properties of a workflow's path properties like location, destination steps, position on the workflow canvas.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowPathDisplayDetails)
   */
  export interface WorkflowPathDisplayDetails extends Object {
    /**
     * The unique id of the step to which the path will lead.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowPathDisplayDetails)
     */
    destStepId: number;
    /**
     * The unique id of the step just executed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowPathDisplayDetails)
     */
    sourceStepID: number;
    /**
     * The label associated with the path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowPathDisplayDetails)
     */
    label: string;
    /**
     * The color of the label on the path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowPathDisplayDetails)
     */
    labelColor: Color;
    /**
     * The X coordinate of the label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowPathDisplayDetails)
     */
    labelX: number;
    /**
     * The Y coordinate of the label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowPathDisplayDetails)
     */
    labelY: number;
    /**
     * The color of the line representing the path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowPathDisplayDetails)
     */
    lineColor: Color;
    /**
     * An object with following properties.Name | Type | Description---------|--------|-------------isDefault | Boolean | Indicates whether this is the default path(only path) from the source step.numReturnValues | Number[] | The number of possible return values for the path.returnValueX | Number[] | The return values associated with the path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowPathDisplayDetails)
     */
    pathObject: any;
  }

  /**
   * WorkflowStepDisplayDetails represents properties of a workflow step.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowStepDisplayDetails)
   */
  export interface WorkflowStepDisplayDetails extends Object {
    /**
     * The color of step label text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowStepDisplayDetails)
     */
    labelColor: Color;
    /**
     * The X coordinate of the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowStepDisplayDetails)
     */
    centerX: number;
    /**
     * The fill color of the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowStepDisplayDetails)
     */
    fillColor: Color;
    /**
     * The height of the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowStepDisplayDetails)
     */
    height: number;
    /**
     * The step text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowStepDisplayDetails)
     */
    label: string;
    /**
     * The Y coordinate of the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowStepDisplayDetails)
     */
    centerY: number;
    /**
     * The outline color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowStepDisplayDetails)
     */
    OutlineColor: Color;
    /**
     * The shape of the step.   **Possible Values:** rounded-rectangle | rectangle | oval | diamond | parallelogram
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowStepDisplayDetails)
     */
    shape: string;
    /**
     * The unique id of the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowStepDisplayDetails)
     */
    stepId: number;
    /**
     * The step execution type.   **Possible Values:** executable | function | procedural | launch-url | question | open-file
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowStepDisplayDetails)
     */
    stepType: string;
    /**
     * The width of the annotation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowStepDisplayDetails)
     */
    width: number;
  }

  /**
   * WorkflowStepInfo represents collection of descriptions for workflow's steps.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowStepInfo)
   */
  export interface WorkflowStepInfo extends Object {
    /**
     * The unique id of the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowStepInfo)
     */
    id: number;
    /**
     * The name of the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#WorkflowStepInfo)
     */
    name: string;
  }

  export interface WorkflowTaskCanRunStepParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#canRunStep)
     */
    jobId: number;
    /**
     * The unique id of the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#canRunStep)
     */
    stepId: number;
    /**
     * The user name of the user wanting to run the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#canRunStep)
     */
    user: string;
  }

  export interface WorkflowTaskExecuteStepsParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#executeSteps)
     */
    jobId: number;
    /**
     * The array of unique step Ids.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#executeSteps)
     */
    stepIds: number[];
    /**
     * Indicates whether to automatically execute as many steps as possible, based on the workflow configuration. The default is false, to execute only the current step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#executeSteps)
     */
    auto: boolean;
    /**
     * The user name of the user executing the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#executeSteps)
     */
    user: string;
  }

  export interface WorkflowTaskGetStepDescriptionParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#getStepDescription)
     */
    jobId: number;
    /**
     * The unique id of the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#getStepDescription)
     */
    stepId: number;
  }

  export interface WorkflowTaskGetStepFileUrlParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#getStepFileUrl)
     */
    jobId: number;
    /**
     * The unique id of the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#getStepFileUrl)
     */
    stepId: number;
  }

  export interface WorkflowTaskGetStepParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#getStep)
     */
    jobId: number;
    /**
     * The unique id of the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#getStep)
     */
    stepId: number;
  }

  export interface WorkflowTaskMarkStepsAsDoneParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#markStepsAsDone)
     */
    jobId: number;
    /**
     * The array of unique step Ids.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#markStepsAsDone)
     */
    stepIds: number[];
    /**
     * The user name of the user marking the step complete.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#markStepsAsDone)
     */
    user: string;
  }

  export interface WorkflowTaskMoveToNextStepParams extends Object {
    /**
     * The unique id of the job Id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#moveToNextStep)
     */
    jobId: number;
    /**
     * The unique id of the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#moveToNextStep)
     */
    stepId: number;
    /**
     * A numeric value representing the return code.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#moveToNextStep)
     */
    returnCode: number;
    /**
     * The user name of the user advancing the workflow to the next step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#moveToNextStep)
     */
    user: string;
  }

  export interface WorkflowTaskRecreateWorkflowParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#recreateWorkflow)
     */
    jobId: number;
    /**
     * The user name of the user recreating the workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#recreateWorkflow)
     */
    user: string;
  }

  export interface WorkflowTaskResolveConflictParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#resolveConflict)
     */
    jobId: number;
    /**
     * The unique id of the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#resolveConflict)
     */
    stepId: number;
    /**
     * A numeric value representing the return code from the step where the conflict was encountered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#resolveConflict)
     */
    optionReturnCode: number;
    /**
     * An array of unique step IDs of all the possible next steps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#resolveConflict)
     */
    optionStepIds: number[];
    /**
     * The user name of the user resolving the conflict.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#resolveConflict)
     */
    user: string;
  }

  export interface WorkflowTaskSetCurrentStepParams extends Object {
    /**
     * The unique id of the job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#setCurrentStep)
     */
    jobId: number;
    /**
     * The unique id of the step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#setCurrentStep)
     */
    stepId: number;
    /**
     * The user name of the user setting the current step.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-workflow-WorkflowTask.html#setCurrentStep)
     */
    user: string;
  }

  interface TimeExtent extends JSONSupport {
    /**
     * The end time of the time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html#end)
     *
     * @default null
     */
    end: Date;
    /**
     * The start time of the time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html#start)
     *
     * @default null
     */
    start: Date;

    /**
     * Creates a deep clone of TimeExtent object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html#clone)
     *
     *
     */
    clone(): TimeExtent;
    /**
     * Returns the time extent resulting from the intersection of the current time extent andparsed time extent. Returns `null` if two time extentsdo not intersect.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html#intersection)
     *
     * @param timeExtent The time extent to be intersected with the time extenton which `intersection()` is being called on.
     *
     */
    intersection(timeExtent: TimeExtent): TimeExtent;
  }

  interface TimeExtentConstructor {
    new (properties?: TimeExtentProperties): TimeExtent;

    fromJSON(json: any): TimeExtent;
  }

  export const TimeExtent: TimeExtentConstructor;

  interface TimeExtentProperties {
    /**
     * The end time of the time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html#end)
     *
     * @default null
     */
    end?: DateProperties;
    /**
     * The start time of the time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html#start)
     *
     * @default null
     */
    start?: DateProperties;
  }

  interface TimeInterval extends JSONSupport {
    /**
     * Temporal units.**Possible Values:** milliseconds | seconds | minutes | hours | days | weeks | months | years | decades | centuries
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeInterval.html#unit)
     *
     * @default milliseconds
     */
    unit: string;
    /**
     * The numerical value of the time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeInterval.html#value)
     *
     * @default 0
     */
    value: number;

    /**
     * Creates a deep clone of TimeInterval object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeInterval.html#clone)
     *
     *
     */
    clone(): TimeInterval;
  }

  interface TimeIntervalConstructor {
    new (properties?: TimeIntervalProperties): TimeInterval;

    fromJSON(json: any): TimeInterval;
  }

  export const TimeInterval: TimeIntervalConstructor;

  interface TimeIntervalProperties {
    /**
     * Temporal units.**Possible Values:** milliseconds | seconds | minutes | hours | days | weeks | months | years | decades | centuries
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeInterval.html#unit)
     *
     * @default milliseconds
     */
    unit?: string;
    /**
     * The numerical value of the time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeInterval.html#value)
     *
     * @default 0
     */
    value?: number;
  }

  interface Viewpoint extends Accessor, JSONSupport {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html#camera)
     */
    camera: Camera;
    /**
     * The rotation of due north in relation to the top of the view in degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html#rotation)
     *
     * @default 0
     */
    rotation: number;
    /**
     * The scale of the viewpoint.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html#scale)
     */
    scale: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html#targetGeometry)
     */
    targetGeometry: Geometry;

    /**
     * Create a deep clone of the viewpoint.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html#clone)
     *
     *
     */
    clone(): Viewpoint;
  }

  interface ViewpointConstructor {
    new (properties?: ViewpointProperties): Viewpoint;

    fromJSON(json: any): Viewpoint;
  }

  export const Viewpoint: ViewpointConstructor;

  interface ViewpointProperties {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html#camera)
     */
    camera?: CameraProperties;
    /**
     * The rotation of due north in relation to the top of the view in degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html#rotation)
     *
     * @default 0
     */
    rotation?: number;
    /**
     * The scale of the viewpoint.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html#scale)
     */
    scale?: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html#targetGeometry)
     */
    targetGeometry?: GeometryProperties;
  }

  interface BaseLayerView2D extends LayerView {
    /**
     * The array of [Tile](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#Tile) objects computed to cover the MapView's visible area.This array is updated when the view is animating or the user is interacting with it. Then if tiles have been added or removed,[tilesChanged()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#tilesChanged) is called.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#tiles)
     */
    tiles: Tile[];
    /**
     * References the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) this [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) belongs to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#view)
     */
    view: MapView;

    /**
     * Method called when after the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) is created and right before it's asked to draw the layer's content.Typically this method is implemented to start watching property changes on the layer for example.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#attach)
     *
     *
     */
    attach(): void;
    /**
     * Method called after the layer is removed and the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) is about to be removed.Typically, this method is implemented to free resources like watchers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#detach)
     *
     *
     */
    detach(): void;
    /**
     * Method to implement that is responsible for providing objects hit at the specified screen coordinates.This method is called internally by the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) each timeits [hitTest()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#hitTest) method is called.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#hitTest)
     *
     * @param x The x-coordinate in screen space of the desired hit.
     * @param y The y-coordinate in screen space of the desired hit.
     *
     */
    hitTest(x: number, y: number): IPromise<Graphic>;
    /**
     * The method to implement that is responsible of drawing the content of the layer.This method is called every time the MapView's state changes, or if [requestRender()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#requestRender) has been called.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#render)
     *
     * @param renderParameters
     * @param renderParameters.context The [canvas 2D context](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D) in which to draw content.
     * @param renderParameters.stationary The stationary state of the `MapView`.
     * @param renderParameters.state The object that describes view state.
     *
     */
    render(renderParameters: BaseLayerView2DRenderRenderParameters): void;
    /**
     * The [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) can call this method to ask the MapView to schedule a new rendering frame.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#requestRender)
     *
     *
     */
    requestRender(): void;
    /**
     * Method to implement, which notifies of tiles being added or removed for the current view state.This function can be implemented to start and stop fetching new data, or allocate and dispose resources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#tilesChanged)
     *
     * @param added The tile objects added for the current view viewport.
     * @param removed The tile objects removed from the view viewport.
     *
     */
    tilesChanged(added: Tile[], removed: Tile[]): void;
  }

  interface BaseLayerView2DConstructor {
    new (properties?: BaseLayerView2DProperties): BaseLayerView2D;
  }

  export const BaseLayerView2D: BaseLayerView2DConstructor;

  interface BaseLayerView2DProperties extends LayerViewProperties {
    /**
     * The array of [Tile](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#Tile) objects computed to cover the MapView's visible area.This array is updated when the view is animating or the user is interacting with it. Then if tiles have been added or removed,[tilesChanged()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#tilesChanged) is called.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#tiles)
     */
    tiles?: Tile[];
    /**
     * References the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) this [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) belongs to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#view)
     */
    view?: MapViewProperties;
  }

  export interface BaseLayerView2DRenderRenderParameters extends Object {
    /**
     * The [canvas 2D context](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D) in which to draw content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#render)
     */
    context: CanvasRenderingContext2D;
    /**
     * The stationary state of the `MapView`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#render)
     */
    stationary: boolean;
    /**
     * The object that describes view state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#render)
     */
    state: ViewState;
  }

  /**
   * Represents a tile reference.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#Tile)
   */
  export interface Tile extends Object {
    /**
     * The tile string identifier in the format `level/row/col/world`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#Tile)
     */
    id: string;
    /**
     * The level identifier of the [LOD](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LOD.html) to which the tile belongs
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#Tile)
     */
    level: number;
    /**
     * The row identifier.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#Tile)
     */
    row: number;
    /**
     * The column identifier.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#Tile)
     */
    col: number;
    /**
     * When the projection allows world wrapping (e.g. Web Mercator), identifies the instance of the world this tile's `level`/`row`/`col`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#Tile)
     */
    world: number;
    /**
     * The number of map units per pixel in the tile.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#Tile)
     */
    resolution: number;
    /**
     * The map scale at the tile's level.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#Tile)
     */
    scale: number;
    /**
     * The coordinates of the top-left corner of the tile as an array of two numbers. The coordinates are in un-normalized map units.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#Tile)
     */
    coords: number[];
    /**
     * The bounds of the tile as an array of four numbers that be readily converted to an [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#Tile)
     */
    bounds: number[];
  }

  interface BaseLayerViewGL2D extends LayerView {
    /**
     * The WebGL rendering context associated to this layer view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#context)
     */
    context: WebGLRenderingContext | any;
    /**
     * The array of [Tile](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#Tile) objects computed to cover the MapView's visible area.This array is updated when the view is animating or the user is interacting with it. Then if tiles have been added or removed,[tilesChanged()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#tilesChanged) is called.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#tiles)
     */
    tiles: BaseLayerViewGL2DTile[];
    /**
     * References the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) this [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) belongs to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#view)
     */
    view: MapView;

    /**
     * Method called after the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) is created and right before it starts drawing the layer's content.Typically this method is implemented to start watching property changes on the layer and to initialize WebGL objects such asshaders.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#attach)
     *
     *
     */
    attach(): void;
    /**
     * Method called after the layer is removed and the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) is about to be removed.Typically, this method is implemented to free resources like watchers and destroy WebGL objects such as shader programs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#detach)
     *
     *
     */
    detach(): void;
    /**
     * Method to implement that is responsible for providing objects hit at the specified screen coordinates.This method is called internally by the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) each timeits [hitTest()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#hitTest) method is called.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#hitTest)
     *
     * @param x The x-coordinate in screen space of the desired hit.
     * @param y The y-coordinate in screen space of the desired hit.
     *
     */
    hitTest(x: number, y: number): IPromise<Graphic>;
    /**
     * The method to implement that is responsible of drawing the content of the layer.This method is called every time the MapView's state changes, or if [requestRender()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#requestRender) has been called.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#render)
     *
     * @param renderParameters
     * @param renderParameters.context TheWebGL or WebGL 2 context. Its concrete type depends on system configuration.Every time that `render()` is called, the API automatically resets WebGL to a conventionalstate which is _almost_ the default one; the only two things that may be non-default arethe bound framebuffer and the viewport, which is set to match the entire framebuffer._The body of `render()` **must not** change these settings_.
     * @param renderParameters.stationary The stationary state of the `MapView`.
     * @param renderParameters.state The object that describes view state.
     *
     */
    render(renderParameters: BaseLayerViewGL2DRenderRenderParameters): void;
    /**
     * The [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) can call this method to ask the MapView to schedule a new rendering frame.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#requestRender)
     *
     *
     */
    requestRender(): void;
    /**
     * Method to implement, which notifies of tiles being added or removed for the current view state.This function can be implemented to start and stop fetching new data, or allocate and dispose resources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#tilesChanged)
     *
     * @param added The tile objects added for the current view viewport.
     * @param removed The tile objects removed from the view viewport.
     *
     */
    tilesChanged(added: BaseLayerViewGL2DTile[], removed: BaseLayerViewGL2DTile[]): void;
  }

  interface BaseLayerViewGL2DConstructor {
    new (properties?: BaseLayerViewGL2DProperties): BaseLayerViewGL2D;
  }

  export const BaseLayerViewGL2D: BaseLayerViewGL2DConstructor;

  interface BaseLayerViewGL2DProperties extends LayerViewProperties {
    /**
     * The WebGL rendering context associated to this layer view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#context)
     */
    context?: WebGLRenderingContext | any;
    /**
     * The array of [Tile](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#Tile) objects computed to cover the MapView's visible area.This array is updated when the view is animating or the user is interacting with it. Then if tiles have been added or removed,[tilesChanged()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#tilesChanged) is called.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#tiles)
     */
    tiles?: BaseLayerViewGL2DTile[];
    /**
     * References the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) this [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) belongs to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#view)
     */
    view?: MapViewProperties;
  }

  export interface BaseLayerViewGL2DRenderRenderParameters extends Object {
    /**
     * TheWebGL or WebGL 2 context. Its concrete type depends on system configuration.Every time that `render()` is called, the API automatically resets WebGL to a conventionalstate which is _almost_ the default one; the only two things that may be non-default arethe bound framebuffer and the viewport, which is set to match the entire framebuffer._The body of `render()` **must not** change these settings_.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#render)
     */
    context: WebGLRenderingContext | any;
    /**
     * The stationary state of the `MapView`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#render)
     */
    stationary: boolean;
    /**
     * The object that describes view state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#render)
     */
    state: ViewState;
  }

  /**
   * Represents a tile reference.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#Tile)
   */
  export interface BaseLayerViewGL2DTile extends Object {
    /**
     * The tile string identifier in the format `level/row/col/world`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#Tile)
     */
    id: string;
    /**
     * The level identifier of the [LOD](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LOD.html) to which the tile belongs
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#Tile)
     */
    level: number;
    /**
     * The row identifier.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#Tile)
     */
    row: number;
    /**
     * The column identifier.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#Tile)
     */
    col: number;
    /**
     * When the projection allows world wrapping (e.g. Web Mercator), identifies the instance of the world this tile's `level`/`row`/`col`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#Tile)
     */
    world: number;
    /**
     * The number of map units per pixel in the tile.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#Tile)
     */
    resolution: number;
    /**
     * The map scale at the tile's level.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#Tile)
     */
    scale: number;
    /**
     * The coordinates of the top-left corner of the tile as an array of two numbers. The coordinates are in un-normalized map units.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#Tile)
     */
    coords: number[];
    /**
     * The bounds of the tile as an array of four numbers that be readily converted to an [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#Tile)
     */
    bounds: number[];
  }

  interface ViewState {
    /**
     * Represents the view's center point as an array of two numbers `[x, y]`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-ViewState.html#center)
     */
    readonly center: number[];
    /**
     * The extent represents the visible portion of a map within the view as an instance of Extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-ViewState.html#extent)
     */
    readonly extent: Extent;
    /**
     * Represents the size of one pixel in map units. The value of `resolution` is the result of the division of the [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-ViewState.html#extent) width by the [size](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-ViewState.html#size).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-ViewState.html#resolution)
     */
    readonly resolution: number;
    /**
     * The clockwise rotation of due north in relation to the top of the view in degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-ViewState.html#rotation)
     */
    readonly rotation: number;
    /**
     * Represents the map scale at the center of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-ViewState.html#scale)
     */
    readonly scale: number;
    /**
     * Represents the width and height of the view in pixels, e.g. `[width, height]`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-ViewState.html#size)
     */
    readonly size: number[];

    /**
     * Creates a deep clone of ViewState object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-ViewState.html#clone)
     *
     *
     */
    clone(): ViewState;
    /**
     * Copies the properties from a given view state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-ViewState.html#copy)
     *
     * @param state The view state to copy the properties from.
     *
     */
    copy(state: ViewState): ViewState;
    /**
     * Converts the x and y screen coordinates to map coordinates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-ViewState.html#toMap)
     *
     * @param out The receiving array of the conversion.
     * @param x The horizontal screen coordinate to convert.
     * @param y The vertical screen coordinate to convert.
     *
     */
    toMap(out: number[], x: number, y: number): number[];
    /**
     * Converts the x and y map coordinates to screen coordinates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-ViewState.html#toScreen)
     *
     * @param out The receiving array of the conversion.
     * @param x The horizontal screen coordinate to convert.
     * @param y The vertical screen coordinate to convert.
     *
     */
    toScreen(out: number[], x: number, y: number): number[];
    /**
     * Converts the x and y map coordinates to screen coordinates.This method is similar to [toScreen](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-ViewState.html#toScreen), without applying the view state rotation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-ViewState.html#toScreenNoRotation)
     *
     * @param out The receiving array of the conversion.
     * @param x The horizontal screen coordinate to convert.
     * @param y The vertical screen coordinate to convert.
     *
     */
    toScreenNoRotation(out: number[], x: number, y: number): number[];
  }

  interface ViewStateConstructor {
    new (): ViewState;
  }

  export const ViewState: ViewStateConstructor;

  interface externalRenderers {
    /**
     * Adds an external renderer to the view. The external renderer is defined by an object that contains certainmethods and properties, as defined by [ExternalRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#ExternalRenderer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#add)
     *
     * @param view The view to which to attach the external renderer.
     * @param renderer The external renderer.
     *
     */
    add(view: SceneView, renderer: ExternalRenderer): void;
    /**
     * Transforms positions from the internal rendering coordinate system to the output spatial reference. The allowableoutput spatial reference is limited and depends on the [viewingMode](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewingMode):  * In `global` mode, it can either be Web Mercator or WGS84.  * In `local` mode, it has to match [view.spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#spatialReference), and    the call to this function simply copies the coordinates from `srcCoordinates` to `destCoordinates`.If these conditions are not met, nothing is written to `destCoordinates` and the function returns `null`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#fromRenderCoordinates)
     *
     * @param view The view related to the input coordinates.
     * @param srcCoordinates A linear array of one or more vectors that are interpreted as XYZ       coordinates. For example, two position vectors would be represented as `[x1, y1, z1, x2, y2, z2]`. This must       contain at least `srcStart + 3 * count` elements.
     * @param srcStart An index in `srcCoordinates` from which the coordinates will start being read.
     * @param destCoordinates A reference to an array in which the results will be written.
     * @param destStart An index in `destCoordinates` in which the coordinates will start to be written.
     * @param destSpatialReference The spatial reference of the output coordinates.       When `null`, `view.spatialReference` is used instead.
     * @param count The number of vertices to be transformed.
     *
     */
    fromRenderCoordinates(
      view: SceneView,
      srcCoordinates: number[] | Float32Array,
      srcStart: number,
      destCoordinates: number[] | Float32Array,
      destStart: number,
      destSpatialReference: SpatialReference,
      count: number
    ): number[] | Float32Array;
    /**
     * Removes an external renderer from the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#remove)
     *
     * @param view The view from which to remove the external renderer.
     * @param renderer The external renderer.
     *
     */
    remove(view: SceneView, renderer: ExternalRenderer): void;
    /**
     * Computes a 4x4 affine transformation matrix that constitutes a linear coordinate transformation from a localCartesian coordinate system to the virtual world coordinate system. For example, this matrix can be used to transformthe vertices of a 3D model to the rendering coordinate system.The local Cartesian system is defined by its origin and the following axis definition:* X: Easting* Y: Northing* Z: Elevation![externalRenderers-renderCoordinateTransformAt](https://developers.arcgis.com/javascript/assets/img/apiref/views/3d/externalRenderers-renderCoordinateTransformAt.png)When [view.viewingMode](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewingMode) is `global`, a lineartransformation does not take the curvature of the globe or other non-linear projection aspects into account. Thus,the resulting coordinates will only appear correct within a small region around the origin of the local Cartesiansystem.The allowable spatial reference of `origin` depends on the[viewingMode](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewingMode):  * In `global` mode, it can either be Web Mercator or WGS84.  * In `local` mode, it has to match [view.spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#spatialReference).If these conditions are not met, nothing will be written to `dest` and the function will return `null`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#renderCoordinateTransformAt)
     *
     * @param view The view for which the transformation will be used.
     * @param origin The global coordinates of the origin in the local Cartesian coordinate       system.
     * @param srcSpatialReference The spatial reference of the origin       coordinates. If undefined, `view.spatialReference` is used instead.
     * @param dest A reference to an array where the 16 matrix elements will be stored.       The resulting matrix follows OpenGL conventions where the translation components occupy the 13th, 14th and       15th elements. If undefined, a newly created matrix returned.
     *
     */
    renderCoordinateTransformAt(
      view: SceneView,
      origin: number[] | Float32Array,
      srcSpatialReference?: SpatialReference,
      dest?: number[] | Float32Array
    ): number[] | Float32Array;
    /**
     * Requests the view to be redrawn.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#requestRender)
     *
     * @param view The view to which the external renderer is attached.
     *
     */
    requestRender(view: SceneView): void;
    /**
     * Transforms positions from the given spatial reference to the internal rendering coordinate system. The allowableinput spatial reference is limited and depends on the [viewingMode](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewingMode):  * In `global` mode, it can either be Web Mercator or WGS84.  * In `local` mode, it has to match [view.spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#spatialReference);    the call to this function simply copies the coordinates from `srcCoordinates` to `destCoordinates`.If these conditions are not met, nothing is written to `destCoordinates` and the function returns `null`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#toRenderCoordinates)
     *
     * @param view The view in which the coordinates will be used.
     * @param srcCoordinates A linear array of one or more vectors which are interpreted as XYZ       coordinates. For example, two position vectors would be represented as `[x1, y1, z1, x2, y2, z2]`. This must       contain at least `srcStart + 3 * count` elements.
     * @param srcStart An index in `srcCoordinates` from which the coordinates start to be read.
     * @param srcSpatialReference The spatial reference of the input coordinates. When       `null`, `view.spatialReference` is used instead.
     * @param destCoordinates A reference to an array where the results will be written.
     * @param destStart An index in `destCoordinates` to which the coordinates will start to be written.
     * @param count The number of vertices to be transformed.
     *
     */
    toRenderCoordinates(
      view: SceneView,
      srcCoordinates: number[] | Float32Array,
      srcStart: number,
      srcSpatialReference: SpatialReference,
      destCoordinates: number[] | Float32Array,
      destStart: number,
      count: number
    ): number[] | Float32Array;
  }

  export const externalRenderers: externalRenderers;

  /**
   * Tuple of an RGB color value and an intensity value.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#ColorAndIntensity)
   */
  export interface ColorAndIntensity extends Object {
    /**
     * RGB color with values between 0 and 1.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#ColorAndIntensity)
     */
    color: ArrayLike<number>;
    /**
     * Scalar intensity value by which the color should be scaled for compositing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#ColorAndIntensity)
     */
    intensity: number;
  }

  /**
   * Defines an external renderer using callbacks and properties.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#ExternalRenderer)
   */
  export interface ExternalRenderer extends Object {
    /**
     * Typically called once after adding the external renderer to a view, or whenever the          [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) becomes [ready](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#ready). It may be called          again if the ready state cycles, for example when a different [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) is assigned to          the view. Receives a single parameter of type [RenderContext](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderContext).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#ExternalRenderer)
     */
    setup?: RenderContextCallback;
    /**
     * Called in every frame to execute the state update and draw calls. Receives a          single parameter of type [RenderContext](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderContext).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#ExternalRenderer)
     */
    render?: RenderContextCallback;
    /**
     * Called when the external renderer is removed from a view, or when the          [ready](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#ready) state of the view turns false. Receives a single parameter of          type [RenderContext](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderContext).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#ExternalRenderer)
     */
    dispose?: RenderContextCallback;
  }

  /**
   * The camera object passed to renderer callbacks in [RenderContext](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderContext). Thisis not the same as [Camera](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html). All properties are read-only and defined in terms of the internalrendering coordinate system (see the [section on coordinate systems](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#coordinate-systems) at the top of this page).Vectors (`Vec3`) are presented as arrays with 3 elements (x, y, z). Matrices (`Mat4`) are presented as linear arrayswith 16 elements following the OpenGL conventions where the translation components occupy the 13th, 14th,and 15th elements.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderCamera)
   */
  export interface RenderCamera extends Object {
    /**
     * A 4x4 matrix that transforms coordinates from world space to camera space.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderCamera)
     */
    viewMatrix: ArrayLike<number>;
    /**
     * The inverse transpose of `viewMatrix`, used to transform normals from                 world space to camera space.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderCamera)
     */
    viewInverseTransposeMatrix: ArrayLike<number>;
    /**
     * A 4x4 matrix that defines the perspective projection transformation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderCamera)
     */
    projectionMatrix: ArrayLike<number>;
    /**
     * The position of the camera in the internal Cartesian          rendering coordinate system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderCamera)
     */
    eye: ArrayLike<number>;
    /**
     * The camera target ("look at") position in the          internal Cartesian rendering coordinate system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderCamera)
     */
    center: ArrayLike<number>;
    /**
     * The camera up vector.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderCamera)
     */
    up: ArrayLike<number>;
    /**
     * The distance to the near plane.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderCamera)
     */
    near: number;
    /**
     * The distance to the far plane.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderCamera)
     */
    far: number;
    /**
     * The horizontal field of view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderCamera)
     */
    fovX: number;
    /**
     * The vertical field of view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderCamera)
     */
    fovY: number;
  }

  /**
   * The object passed as a parameter to every call to `setup` and `render` the external renderer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderContext)
   */
  export interface RenderContext extends Object {
    /**
     * The WebGL rendering context.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderContext)
     */
    gl: WebGLRenderingContext;
    /**
     * The camera used to render the current frame.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderContext)
     */
    camera: RenderCamera;
    /**
     * The lighting used by [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) to render the current frame.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderContext)
     */
    sunLight: SunLight;

    /**
     * A convenience function provided to completely reset the WebGL state after using it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderContext)
     *
     *
     */
    resetWebGLState(): void;
    /**
     * Binds the color and depth buffers an external renderer is supposed to render into.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderContext)
     *
     *
     */
    bindRenderTarget(): void;
  }

  export type RenderContextCallback = (context?: RenderContext) => void;

  /**
   * Describes the lighting used by [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html), derived from its sunlighting model. It consists of a directionalLambertian (`diffuse`) and a constant (`ambient`) term, which should be treated in the sense of the[Phong Reflection Model](https://en.wikipedia.org/wiki/Phong_reflection_model).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#SunLight)
   */
  export interface SunLight extends Object {
    /**
     * The incident light direction in render coordinates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#SunLight)
     */
    direction: ArrayLike<number>;
    /**
     * The diffuse light color and intensity.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#SunLight)
     */
    diffuse: ColorAndIntensity;
    /**
     * The ambient light color and intensity.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#SunLight)
     */
    ambient: ColorAndIntensity;
  }

  interface BreakpointsOwner {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#breakpoints)
     */
    breakpoints: BreakpointsOwnerBreakpoints;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#heightBreakpoint)
     */
    heightBreakpoint: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#orientation)
     */
    readonly orientation: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#widthBreakpoint)
     */
    widthBreakpoint: string;
  }

  interface BreakpointsOwnerConstructor {
    new (): BreakpointsOwner;
  }

  export const BreakpointsOwner: BreakpointsOwnerConstructor;

  interface BreakpointsOwnerProperties {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#breakpoints)
     */
    breakpoints?: BreakpointsOwnerBreakpoints;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#heightBreakpoint)
     */
    heightBreakpoint?: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#widthBreakpoint)
     */
    widthBreakpoint?: string;
  }

  export interface BreakpointsOwnerBreakpoints extends Object {
    /**
     * Sets the `xsmall` breakpoint in pixels used by[widthBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#widthBreakpoint) and [heightBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#heightBreakpoint). If theview's [height](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#height) or [width](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#width) is smaller than this value, then the value of[widthBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#widthBreakpoint) or [heightBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#heightBreakpoint) willbe `xsmall`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#breakpoints)
     *
     * @default 544
     */
    xsmall?: number;
    /**
     * Sets the `small` breakpoint in pixels used by[widthBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#widthBreakpoint) and [heightBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#heightBreakpoint). If theview's [height](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#height) or [width](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#width) is between this value and the valueof the `xsmall` property, then the value of[widthBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#widthBreakpoint) or [heightBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#heightBreakpoint) willbe `small`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#breakpoints)
     *
     * @default 768
     */
    small?: number;
    /**
     * Sets the `medium` breakpoint in pixels used by[widthBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#widthBreakpoint) and [heightBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#heightBreakpoint). If theview's [height](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#height) or [width](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#width) is between this value and the valueof the `small` property, then the value of[widthBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#widthBreakpoint) or [heightBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#heightBreakpoint) willbe `medium`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#breakpoints)
     *
     * @default 992
     */
    medium?: number;
    /**
     * Sets the `large` breakpoint in pixels used by[widthBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#widthBreakpoint) and [heightBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#heightBreakpoint). If theview's [height](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#height) or [width](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#width) is between this value and the valueof the `medium` property, then the value of[widthBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#widthBreakpoint) or [heightBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#heightBreakpoint) willbe `large`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#breakpoints)
     *
     * @default 1200
     */
    large?: number;
    /**
     * Sets the `xlarge` breakpoint in pixels used by[widthBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#widthBreakpoint) and [heightBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#heightBreakpoint). If theview's [height](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#height) or [width](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#width) is greater than the valueof the `large` property, then the value of[widthBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#widthBreakpoint) or [heightBreakpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#heightBreakpoint) willbe `xlarge`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#breakpoints)
     */
    xlarge?: number;
  }

  interface DOMContainer {
    /**
     * The `id` or node representing the DOM element containing the view. This is typically set in the view's constructor.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#container)
     */
    container: HTMLDivElement;
    /**
     * Indicates if the browser focus is on the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#focused)
     */
    readonly focused: boolean;
    /**
     * The height of the view in pixels read from the view container element.The view container needs to have a height greater than 0 to be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#height)
     *
     * @default 0
     */
    readonly height: number;
    /**
     * A Popup object that displays general content or attributes from[layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#layers) in the [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#map).The view has a default instance of [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) withpredefined styles and a template for defining content. The content in thisdefault instance may be modified directly in the[popup's content](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#content) or in a layer's[PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).You may create a new [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) instance and set it tothis property to customize the style, positioning, and content of the popupin favor of using the default popup instance on the view.In addition, if wanting to prevent any popups from opening, use the syntax below:
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#popup)
     */
    popup: Popup;
    /**
     * Indicates if the view is being resized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#resizing)
     *
     * @default false
     */
    readonly resizing: boolean;
    /**
     * An array containing the width and height of the view in pixels, e.g. `[width, height]`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#size)
     */
    readonly size: number[];
    /**
     * Indicates if the view is visible on the page.Is `true` if the view has no [container](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#container),a [height](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#height) or [width](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#width) equal to 0,or the CSS `visibility` is `hidden`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#suspended)
     *
     * @default true
     */
    readonly suspended: boolean;
    /**
     * Exposes the default widgets available in the view and allows you to toggle them onand off. See [DefaultUI](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-DefaultUI.html) for more details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#ui)
     */
    ui: DefaultUI;
    /**
     * The width of the view in pixels read from the view container element.The view container needs to have a width greater than 0 to be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#width)
     *
     * @default 0
     */
    readonly width: number;
  }

  interface DOMContainerConstructor {
    new (): DOMContainer;
  }

  export const DOMContainer: DOMContainerConstructor;

  interface DOMContainerProperties {
    /**
     * The `id` or node representing the DOM element containing the view. This is typically set in the view's constructor.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#container)
     */
    container?: HTMLDivElement | string;
    /**
     * A Popup object that displays general content or attributes from[layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#layers) in the [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#map).The view has a default instance of [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) withpredefined styles and a template for defining content. The content in thisdefault instance may be modified directly in the[popup's content](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#content) or in a layer's[PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).You may create a new [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) instance and set it tothis property to customize the style, positioning, and content of the popupin favor of using the default popup instance on the view.In addition, if wanting to prevent any popups from opening, use the syntax below:
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#popup)
     */
    popup?: PopupProperties;
    /**
     * Exposes the default widgets available in the view and allows you to toggle them onand off. See [DefaultUI](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-DefaultUI.html) for more details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#ui)
     */
    ui?: DefaultUIProperties;
  }

  interface Draw extends Accessor {
    /**
     * A reference to the active [draw action](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html).An instance of the draw action is created when [create()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-Draw.html#create) method is called.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-Draw.html#activeAction)
     */
    activeAction: DrawAction;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). Set this to link the draw to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-Draw.html#view)
     */
    view: MapView;

    /**
     * Complete the current active drawing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-Draw.html#complete)
     *
     *
     */
    complete(): void;
    /**
     * Creates an instance of the requested draw action.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-Draw.html#create)
     *
     * @param drawAction Name of the [draw action](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html) to create.See the table below for a list of possible values and type of draw action it creates.**Possible Values:** point | multipoint | polyline | polygon | rectangle | circle | ellipseGeometry type | Draw action instance------------- | --------------------point         | [PointDrawAction](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PointDrawAction.html)multipoint    | [MultipointDrawAction](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-MultipointDrawAction.html) (only supported in [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html))polyline      | [PolylineDrawAction](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolylineDrawAction.html)polygon       | [PolygonDrawAction](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolygonDrawAction.html)rectangle, circle, ellipse | [SegmentDrawAction](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-SegmentDrawAction.html)
     * @param drawOptions Object of the drawing options for the geometry to be created.
     * @param drawOptions.mode The drawing mode. The drawing mode applies only when creating `polygon`, `polyline`, `segment` draw actions.**Possible Values:**Value | Description |----- | ----------- |hybrid | Vertices are added while the pointer is clicked or dragged. Applies to and is the default for `polygon` and `polyline` draw actions.freehand | Vertices are added while the pointer is dragged. Applies to `polygon`, `polyline` and `segment` draw actions. Default for `segment` draw actions.click | Vertices are added when the pointer is clicked.
     *
     */
    create(drawAction: string, drawOptions?: DrawCreateDrawOptions): DrawAction;
    /**
     * Resets the drawing by clearing the active action.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-Draw.html#reset)
     *
     *
     */
    reset(): void;
  }

  interface DrawConstructor {
    new (properties?: DrawProperties): Draw;
  }

  export const Draw: DrawConstructor;

  interface DrawProperties {
    /**
     * A reference to the active [draw action](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html).An instance of the draw action is created when [create()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-Draw.html#create) method is called.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-Draw.html#activeAction)
     */
    activeAction?: DrawActionProperties;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). Set this to link the draw to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-Draw.html#view)
     */
    view?: MapViewProperties;
  }

  export interface DrawCreateDrawOptions extends Object {
    /**
     * The drawing mode. The drawing mode applies only when creating `polygon`, `polyline`, `segment` draw actions.**Possible Values:**Value | Description |----- | ----------- |hybrid | Vertices are added while the pointer is clicked or dragged. Applies to and is the default for `polygon` and `polyline` draw actions.freehand | Vertices are added while the pointer is dragged. Applies to `polygon`, `polyline` and `segment` draw actions. Default for `segment` draw actions.click | Vertices are added when the pointer is clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-Draw.html#create)
     */
    mode?: string;
  }

  interface DrawAction extends Accessor, Evented {
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#view)
     */
    view: MapView;

    /**
     * Indicates if the [redo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#redo) method can be called on the action instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#canRedo)
     *
     *
     */
    canRedo(): boolean;
    /**
     * Indicates if the [undo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#undo) method can be called on the action instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#canUndo)
     *
     *
     */
    canUndo(): boolean;
    /**
     * Incrementally redo actions recorded in the stack. Call [canRedo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#canRedo) prior to calling this methodto check if this method can be called on the action instance. Calling this method will fire the[vertex-add](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#event-vertex-add) or [vertex-remove](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#event-vertex-remove) events dependingon the last action.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#redo)
     *
     *
     */
    redo(): void;
    /**
     * Incrementally undo actions recorded in the stack. Call [canUndo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#canUndo) prior to calling this methodto check if this method can be called on the action instance. Calling this method will fire the[vertex-add](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#event-vertex-add) or [vertex-remove](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#event-vertex-remove) events dependingon the last action.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#undo)
     *
     *
     */
    undo(): void;
  }

  interface DrawActionConstructor {
    new (properties?: DrawActionProperties): DrawAction;
  }

  export const DrawAction: DrawActionConstructor;

  interface DrawActionProperties {
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#view)
     */
    view?: MapViewProperties;
  }

  interface MultipointDrawAction extends DrawAction {
    /**
     * Two-dimensional array of numbers representing the coordinates of each vertexthat comprises the drawn geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-MultipointDrawAction.html#vertices)
     */
    readonly vertices: number[][];

    /**
     * Completes drawing the [multipoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html) geometry and fires the [draw-complete](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-MultipointDrawAction.html#event-draw-complete) event.Call this method if the drawing logic needs to be completed other than by double-clicking or pressing the "C" key.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-MultipointDrawAction.html#complete)
     *
     *
     */
    complete(): void;
  }

  interface MultipointDrawActionConstructor {
    new (properties?: MultipointDrawActionProperties): MultipointDrawAction;
  }

  export const MultipointDrawAction: MultipointDrawActionConstructor;

  interface MultipointDrawActionProperties extends DrawActionProperties {}

  interface PointDrawAction extends DrawAction {
    /**
     * An array of x,y coordinates for the [point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PointDrawAction.html#coordinates)
     */
    readonly coordinates: number[];

    /**
     * Completes drawing the [point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometry and fires the [draw-complete](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PointDrawAction.html#event-draw-complete) event.Call this method if the drawing logic needs to be completed other than by double-clicking or pressing the "C" key.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PointDrawAction.html#complete)
     *
     *
     */
    complete(): void;
  }

  interface PointDrawActionConstructor {
    new (properties?: PointDrawActionProperties): PointDrawAction;
  }

  export const PointDrawAction: PointDrawActionConstructor;

  interface PointDrawActionProperties extends DrawActionProperties {}

  interface PolygonDrawAction extends DrawAction {
    /**
     * The drawing mode. It is only relevant when the action is first created.Its value cannot be changed during the action lifecycle.**Possible Values:**Value | Description |----- | ----------- |hybrid | Vertices are added while the pointer is clicked or dragged.freehand | Vertices are added while the pointer is dragged.click | Vertices are added when the pointer is clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolygonDrawAction.html#mode)
     *
     * @default hybrid
     */
    mode: string;
    /**
     * Two-dimensional array of numbers representing the coordinates of each vertexcomprising the geometry being drawn.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolygonDrawAction.html#vertices)
     */
    readonly vertices: number[][];

    /**
     * Completes drawing the polygon geometry and fires the [draw-complete](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolygonDrawAction.html#event-draw-complete) event.Call this method if the drawing logic needs to be completed other than by double-clicking or pressing the "C" key.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolygonDrawAction.html#complete)
     *
     *
     */
    complete(): void;
  }

  interface PolygonDrawActionConstructor {
    new (properties?: PolygonDrawActionProperties): PolygonDrawAction;
  }

  export const PolygonDrawAction: PolygonDrawActionConstructor;

  interface PolygonDrawActionProperties extends DrawActionProperties {
    /**
     * The drawing mode. It is only relevant when the action is first created.Its value cannot be changed during the action lifecycle.**Possible Values:**Value | Description |----- | ----------- |hybrid | Vertices are added while the pointer is clicked or dragged.freehand | Vertices are added while the pointer is dragged.click | Vertices are added when the pointer is clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolygonDrawAction.html#mode)
     *
     * @default hybrid
     */
    mode?: string;
  }

  interface PolylineDrawAction extends DrawAction {
    /**
     * The drawing mode. It is only relevant when the action is first created.Its value cannot be changed during the action lifecycle.**Possible Values:**Value | Description |----- | ----------- |hybrid | Vertices are added while the pointer is clicked or dragged.freehand | Vertices are added while the pointer is dragged.click | Vertices are added when the pointer is clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolylineDrawAction.html#mode)
     *
     * @default hybrid
     */
    mode: string;
    /**
     * Two-dimensional array of numbers representing the coordinates of each vertexcomprising the geometry being drawn.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolylineDrawAction.html#vertices)
     */
    readonly vertices: number[][];

    /**
     * Completes drawing the polyline geometry and fires the [draw-complete](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolylineDrawAction.html#event-draw-complete) event.Call this method if the drawing logic needs to be completed other than by double-clicking or pressing the "C" key.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolylineDrawAction.html#complete)
     *
     *
     */
    complete(): void;
  }

  interface PolylineDrawActionConstructor {
    new (properties?: PolylineDrawActionProperties): PolylineDrawAction;
  }

  export const PolylineDrawAction: PolylineDrawActionConstructor;

  interface PolylineDrawActionProperties extends DrawActionProperties {
    /**
     * The drawing mode. It is only relevant when the action is first created.Its value cannot be changed during the action lifecycle.**Possible Values:**Value | Description |----- | ----------- |hybrid | Vertices are added while the pointer is clicked or dragged.freehand | Vertices are added while the pointer is dragged.click | Vertices are added when the pointer is clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolylineDrawAction.html#mode)
     *
     * @default hybrid
     */
    mode?: string;
  }

  interface SegmentDrawAction extends DrawAction {
    /**
     * The drawing mode. It is only relevant when the action is first created.Its value cannot be changed during the action lifecycle.**Possible Values:**Value | Description |----- | ----------- |freehand | Vertices are added while the pointer is dragged.click | Vertices are added when the pointer is clicked. SegmentDrawActions are created from 2 vertices.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-SegmentDrawAction.html#mode)
     *
     * @default freehand
     */
    mode: string;
    /**
     * Two-dimensional array of numbers representing the coordinates of each vertexcomprising the geometry being drawn.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-SegmentDrawAction.html#vertices)
     */
    readonly vertices: number[][];

    /**
     * Completes drawing the polygon geometry and fires the [draw-complete](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-SegmentDrawAction.html#event-draw-complete) event.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-SegmentDrawAction.html#complete)
     *
     *
     */
    complete(): void;
  }

  interface SegmentDrawActionConstructor {
    new (properties?: SegmentDrawActionProperties): SegmentDrawAction;
  }

  export const SegmentDrawAction: SegmentDrawActionConstructor;

  interface SegmentDrawActionProperties extends DrawActionProperties {
    /**
     * The drawing mode. It is only relevant when the action is first created.Its value cannot be changed during the action lifecycle.**Possible Values:**Value | Description |----- | ----------- |freehand | Vertices are added while the pointer is dragged.click | Vertices are added when the pointer is clicked. SegmentDrawActions are created from 2 vertices.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-SegmentDrawAction.html#mode)
     *
     * @default freehand
     */
    mode?: string;
  }

  interface GroundView extends Accessor {
    /**
     * An elevation sampler that may be used to sample and query elevationvalues from the ground surface that is currently being displayed.The elevation sampler is not supported for [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)and may be `null` while the ground surface display is being initialized.The resolution of the sampled values depends on the ground elevationdisplay resolution (high resolution close to the camera, low resolutionfar away from the camera). Because of the dynamic nature of the displayresolution, the [demResolution](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ElevationSampler.html#demResolution)property of the returned sampler will always return `{ min: -1, max: -1 }.If higher or more consistent sample resolutionis required, then consider creating a sampler at the desired resolutionusing ElevationLayer.createSampleror Ground.createSampler.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-GroundView.html#elevationSampler)
     */
    readonly elevationSampler: ElevationSampler;
    /**
     * A collection containing a hierarchical list of all the created[LayerViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) of the[layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#layers) in the ground.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-GroundView.html#layerViews)
     */
    readonly layerViews: Collection<LayerView>;
    /**
     * Value is `true` when any of the ground layer views are updating.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-GroundView.html#updating)
     *
     * @default false
     */
    readonly updating: boolean;
  }

  interface GroundViewConstructor {
    new (properties?: GroundViewProperties): GroundView;
  }

  export const GroundView: GroundViewConstructor;

  interface GroundViewProperties {}

  interface GamepadInputDevice extends Accessor {
    /**
     * The native Gamepad object exposed by the browser.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-input-gamepad-GamepadInputDevice.html#native)
     */
    readonly native: Gamepad;
  }

  interface GamepadInputDeviceConstructor {
    new (properties?: GamepadInputDeviceProperties): GamepadInputDevice;
  }

  export const GamepadInputDevice: GamepadInputDeviceConstructor;

  interface GamepadInputDeviceProperties {}

  interface GamepadSettings extends Accessor {
    /**
     * A readonly collection of all gamepads detected.Can be watched for gamepads to be connected or disconnected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-input-gamepad-GamepadSettings.html#devices)
     */
    readonly devices: Collection<GamepadInputDevice>;
    /**
     * Determines what focus is required for gamepad events to be dispatched.Possible values: document | view | nonePossible Value | Description---------------|------------document | Gamepad events are emitted when any part of the current webpage has focus. This allows for gamepad events being emitted even while a UI element is focused.view | Gamepad events are emitted when the view [container element](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#container) has browser focus. This is useful when multiple views might be present on a single webpage.none | Gamepad events are emitted independently of focus.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-input-gamepad-GamepadSettings.html#enabledFocusMode)
     *
     * @default document
     */
    enabledFocusMode: "document" | "view" | "none";
  }

  interface GamepadSettingsConstructor {
    new (properties?: GamepadSettingsProperties): GamepadSettings;
  }

  export const GamepadSettings: GamepadSettingsConstructor;

  interface GamepadSettingsProperties {
    /**
     * Determines what focus is required for gamepad events to be dispatched.Possible values: document | view | nonePossible Value | Description---------------|------------document | Gamepad events are emitted when any part of the current webpage has focus. This allows for gamepad events being emitted even while a UI element is focused.view | Gamepad events are emitted when the view [container element](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#container) has browser focus. This is useful when multiple views might be present on a single webpage.none | Gamepad events are emitted independently of focus.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-input-gamepad-GamepadSettings.html#enabledFocusMode)
     *
     * @default document
     */
    enabledFocusMode?: "document" | "view" | "none";
  }

  interface Input extends Accessor {
    /**
     * Gamepad input specific configuration settings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-input-Input.html#gamepad)
     */
    readonly gamepad: GamepadSettings;
  }

  interface InputConstructor {
    new (properties?: InputProperties): Input;
  }

  export const Input: InputConstructor;

  interface InputProperties {}

  interface CSVLayerView extends LayerView {
    /**
     * The effect applied to the layer view. The effect allows for the selection of features via a[filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#filter), and an[includedEffect](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#includedEffect) and[excludedEffect](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#excludedEffect)are applied to those features that respectively pass or fail the filter requirements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#effect)
     */
    effect: FeatureEffect;
    /**
     * The [attribute](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#where),[geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#geometry),and [time extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#timeExtent)filter. Only the features that satisfy the filter are displayed on the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#filter)
     */
    filter: FeatureFilter;
    /**
     * The maximum number of features that can be displayed at a time. This setting currently only applies toSceneView. By default, the maximum number of features is estimated automatically depending on the symbology,geometry complexity, memory consumption and display quality profile.Changing this setting to a higher value may lead to a significant decrease in performance and increase inmemory usage.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#maximumNumberOfFeatures)
     */
    maximumNumberOfFeatures: number;
    /**
     * Signifies whether the maximum number of features has been exceeded. Not all features could be displayedwhen this value is `true`. This setting currently only applies to SceneView.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#maximumNumberOfFeaturesExceeded)
     */
    maximumNumberOfFeaturesExceeded: boolean;

    /**
     * Creates a query parameter object that can be used to fetch features as they are beingdisplayed. It sets the query parameter's [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outFields)property to `["*"]` and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnGeometry) to `true`.The output spatial reference [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outSpatialReference)is set to the spatial reference of the view. Parameters of the [filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#filter) currentlyapplied to the layerview are also incorporated in the returned query object. The results will includegeometries of features and values for all fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#createQuery)
     *
     *
     */
    createQuery(): Query;
    /**
     * Highlights the given feature(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#highlight)
     *
     * @param target The feature(s) to highlight. When passing a graphic or array of graphics, each feature musthave a valid `objectID`. You may alternatively pass one or more objectIDs as a single number oran array.
     *
     */
    highlight(target?: Graphic | Graphic[] | number | number[]): Handle;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#queryExtent)
     *
     * @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 featuresvisible in the view, set the `geometry` parameter in the query object to the view's extent.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryExtent(query?: Query | QueryProperties, options?: CSVLayerViewQueryExtentOptions): IPromise<any>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#queryFeatureCount)
     *
     * @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 featuresvisible in the view, set the `geometry` parameter in the query object to the view's extent.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryFeatureCount(
      query?: Query | QueryProperties,
      options?: CSVLayerViewQueryFeatureCountOptions
    ): IPromise<number>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#queryFeatures)
     *
     * @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 featuresvisible in the view, set the `geometry` parameter in the query object to the view's extent.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryFeatures(query?: Query | QueryProperties, options?: CSVLayerViewQueryFeaturesOptions): IPromise<FeatureSet>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#queryObjectIds)
     *
     * @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 featuresvisible in the view, set the `geometry` parameter in the query object to the view's extent.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryObjectIds(query?: Query | QueryProperties, options?: CSVLayerViewQueryObjectIdsOptions): IPromise<number[]>;
  }

  interface CSVLayerViewProperties extends LayerViewProperties {
    /**
     * The effect applied to the layer view. The effect allows for the selection of features via a[filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#filter), and an[includedEffect](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#includedEffect) and[excludedEffect](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#excludedEffect)are applied to those features that respectively pass or fail the filter requirements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#effect)
     */
    effect?: FeatureEffectProperties;
    /**
     * The [attribute](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#where),[geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#geometry),and [time extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#timeExtent)filter. Only the features that satisfy the filter are displayed on the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#filter)
     */
    filter?: FeatureFilterProperties;
    /**
     * The maximum number of features that can be displayed at a time. This setting currently only applies toSceneView. By default, the maximum number of features is estimated automatically depending on the symbology,geometry complexity, memory consumption and display quality profile.Changing this setting to a higher value may lead to a significant decrease in performance and increase inmemory usage.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#maximumNumberOfFeatures)
     */
    maximumNumberOfFeatures?: number;
    /**
     * Signifies whether the maximum number of features has been exceeded. Not all features could be displayedwhen this value is `true`. This setting currently only applies to SceneView.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#maximumNumberOfFeaturesExceeded)
     */
    maximumNumberOfFeaturesExceeded?: boolean;
  }

  export interface CSVLayerViewQueryExtentOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#queryExtent)
     */
    signal?: AbortSignal;
  }

  export interface CSVLayerViewQueryFeatureCountOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#queryFeatureCount)
     */
    signal?: AbortSignal;
  }

  export interface CSVLayerViewQueryFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#queryFeatures)
     */
    signal?: AbortSignal;
  }

  export interface CSVLayerViewQueryObjectIdsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#queryObjectIds)
     */
    signal?: AbortSignal;
  }

  interface FeatureLayerView extends LayerView {
    /**
     * A list of attribute fields fetched for each feature including fields required for layer[rendering](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#renderer), [labeling](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#labelingInfo),[elevation info](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#elevationInfo), and additional fields defined on the[FeatureLayer.outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#outFields).The availableFields is populated when the layer view is finished [updating](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#updating). Use this list whensetting [client-side filtering](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#filter) or querying features on the [client-side](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryFeatures).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#availableFields)
     */
    readonly availableFields: string[];
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#effect)
     */
    effect: FeatureEffect;
    /**
     * The [attribute](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#where),[geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#geometry),and [time extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#timeExtent)filter. Only the features that satisfy the filter are displayed on the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#filter)
     */
    filter: FeatureFilter;
    /**
     * The layer being viewed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#layer)
     */
    readonly layer: FeatureLayer;
    /**
     * The maximum number of features that can be displayed at a time. This setting currently only applies toSceneView. By default, the maximum number of features is estimated automatically depending on the symbology,geometry complexity, memory consumption and display quality profile.Changing this setting to a higher value may lead to a significant decrease in performance and increase inmemory usage.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#maximumNumberOfFeatures)
     */
    maximumNumberOfFeatures: number;
    /**
     * Signifies whether the maximum number of features has been exceeded. Not all features could be displayedwhen this value is `true`. This setting currently only applies to SceneView.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#maximumNumberOfFeaturesExceeded)
     */
    maximumNumberOfFeaturesExceeded: boolean;

    /**
     * Creates query parameter object that can be used to fetch features as they are beingdisplayed. It sets the query parameter's [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outFields)property to `["*"]` and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnGeometry) to `true`.The output spatial reference [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outSpatialReference)is set to the spatial reference of the view. Parameters of the [filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#filter) currentlyapplied to the layerview are also incorporated in the returned query object. The results will includegeometries of features and values for [availableFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#availableFields).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#createQuery)
     *
     *
     */
    createQuery(): Query;
    /**
     * Highlights the given feature(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#highlight)
     *
     * @param target The feature(s) to highlight. When passing a graphic or array of graphics, each feature musthave a valid `objectID`. You may alternatively pass one or more objectIDs as a single number oran array.
     *
     */
    highlight(target?: Graphic | Graphic[] | number | number[]): Handle;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryExtent)
     *
     * @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 featuresvisible in the view, set the `geometry` parameter in the query object to the view's extent.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryExtent(query?: Query | QueryProperties, options?: FeatureLayerViewQueryExtentOptions): IPromise<any>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryFeatureCount)
     *
     * @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 featuresvisible in the view, set the `geometry` parameter in the query object to the view's extent.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryFeatureCount(
      query?: Query | QueryProperties,
      options?: FeatureLayerViewQueryFeatureCountOptions
    ): IPromise<number>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryFeatures)
     *
     * @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 along with their attributesspecified in [availableFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#availableFields). To only return featuresvisible in the view, set the `geometry` parameter in the query object to the view's extent.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryFeatures(
      query?: Query | QueryProperties,
      options?: FeatureLayerViewQueryFeaturesOptions
    ): IPromise<FeatureSet>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryObjectIds)
     *
     * @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 featuresvisible in the view, set the `geometry` parameter in the query object to the view's extent.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryObjectIds(
      query?: Query | QueryProperties,
      options?: FeatureLayerViewQueryObjectIdsOptions
    ): IPromise<number[]>;
  }

  interface FeatureLayerViewConstructor {
    new (properties?: FeatureLayerViewProperties): FeatureLayerView;
  }

  export const FeatureLayerView: FeatureLayerViewConstructor;

  interface FeatureLayerViewProperties extends LayerViewProperties {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#effect)
     */
    effect?: FeatureEffectProperties;
    /**
     * The [attribute](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#where),[geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#geometry),and [time extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#timeExtent)filter. Only the features that satisfy the filter are displayed on the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#filter)
     */
    filter?: FeatureFilterProperties;
    /**
     * The maximum number of features that can be displayed at a time. This setting currently only applies toSceneView. By default, the maximum number of features is estimated automatically depending on the symbology,geometry complexity, memory consumption and display quality profile.Changing this setting to a higher value may lead to a significant decrease in performance and increase inmemory usage.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#maximumNumberOfFeatures)
     */
    maximumNumberOfFeatures?: number;
    /**
     * Signifies whether the maximum number of features has been exceeded. Not all features could be displayedwhen this value is `true`. This setting currently only applies to SceneView.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#maximumNumberOfFeaturesExceeded)
     */
    maximumNumberOfFeaturesExceeded?: boolean;
  }

  export interface FeatureLayerViewQueryExtentOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryExtent)
     */
    signal?: AbortSignal;
  }

  export interface FeatureLayerViewQueryFeatureCountOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryFeatureCount)
     */
    signal?: AbortSignal;
  }

  export interface FeatureLayerViewQueryFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryFeatures)
     */
    signal?: AbortSignal;
  }

  export interface FeatureLayerViewQueryObjectIdsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryObjectIds)
     */
    signal?: AbortSignal;
  }

  interface GeoJSONLayerView extends LayerView {
    /**
     * The effect applied to the layer view. The effect allows for the selection of features via a[filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#filter), and an[includedEffect](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#includedEffect) and[excludedEffect](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#excludedEffect)are applied to those features that respectively pass or fail the filter requirements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#effect)
     */
    effect: FeatureEffect;
    /**
     * The [attribute](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#where),[geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#geometry),and [time extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#timeExtent)filter. Only the features that satisfy the filter are displayed on the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#filter)
     */
    filter: FeatureFilter;
    /**
     * The maximum number of features that can be displayed at a time. This setting currently only applies toSceneView. By default, the maximum number of features is estimated automatically depending on the symbology,geometry complexity, memory consumption and display quality profile.Changing this setting to a higher value may lead to a significant decrease in performance and increase inmemory usage.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#maximumNumberOfFeatures)
     */
    maximumNumberOfFeatures: number;
    /**
     * Signifies whether the maximum number of features has been exceeded. Not all features could be displayedwhen this value is `true`. This setting currently only applies to SceneView.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#maximumNumberOfFeaturesExceeded)
     */
    maximumNumberOfFeaturesExceeded: boolean;

    /**
     * Creates a query parameter object that can be used to fetch features as they are beingdisplayed. It sets the query parameter's [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outFields)property to `["*"]` and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnGeometry) to `true`.The output spatial reference [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outSpatialReference)is set to the spatial reference of the view. Parameters of the [filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#filter) currentlyapplied to the layerview are also incorporated in the returned query object. The results will includegeometries of features and values for all fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#createQuery)
     *
     *
     */
    createQuery(): Query;
    /**
     * Highlights the given feature(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#highlight)
     *
     * @param target The feature(s) to highlight. When passing a graphic or array of graphics, each feature musthave a valid `objectID`. You may alternatively pass one or more objectIDs as a single number oran array.
     *
     */
    highlight(target?: Graphic | Graphic[] | number | number[]): Handle;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#queryExtent)
     *
     * @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 featuresvisible in the view, set the `geometry` parameter in the query object to the view's extent.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryExtent(query?: Query | QueryProperties, options?: GeoJSONLayerViewQueryExtentOptions): IPromise<any>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#queryFeatureCount)
     *
     * @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 featuresvisible in the view, set the `geometry` parameter in the query object to the view's extent.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryFeatureCount(
      query?: Query | QueryProperties,
      options?: GeoJSONLayerViewQueryFeatureCountOptions
    ): IPromise<number>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#queryFeatures)
     *
     * @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 featuresvisible in the view, set the `geometry` parameter in the query object to the view's extent.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryFeatures(
      query?: Query | QueryProperties,
      options?: GeoJSONLayerViewQueryFeaturesOptions
    ): IPromise<FeatureSet>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#queryObjectIds)
     *
     * @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 featuresvisible in the view, set the `geometry` parameter in the query object to the view's extent.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryObjectIds(
      query?: Query | QueryProperties,
      options?: GeoJSONLayerViewQueryObjectIdsOptions
    ): IPromise<number[]>;
  }

  interface GeoJSONLayerViewProperties extends LayerViewProperties {
    /**
     * The effect applied to the layer view. The effect allows for the selection of features via a[filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#filter), and an[includedEffect](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#includedEffect) and[excludedEffect](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#excludedEffect)are applied to those features that respectively pass or fail the filter requirements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#effect)
     */
    effect?: FeatureEffectProperties;
    /**
     * The [attribute](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#where),[geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#geometry),and [time extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#timeExtent)filter. Only the features that satisfy the filter are displayed on the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#filter)
     */
    filter?: FeatureFilterProperties;
    /**
     * The maximum number of features that can be displayed at a time. This setting currently only applies toSceneView. By default, the maximum number of features is estimated automatically depending on the symbology,geometry complexity, memory consumption and display quality profile.Changing this setting to a higher value may lead to a significant decrease in performance and increase inmemory usage.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#maximumNumberOfFeatures)
     */
    maximumNumberOfFeatures?: number;
    /**
     * Signifies whether the maximum number of features has been exceeded. Not all features could be displayedwhen this value is `true`. This setting currently only applies to SceneView.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#maximumNumberOfFeaturesExceeded)
     */
    maximumNumberOfFeaturesExceeded?: boolean;
  }

  export interface GeoJSONLayerViewQueryExtentOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#queryExtent)
     */
    signal?: AbortSignal;
  }

  export interface GeoJSONLayerViewQueryFeatureCountOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#queryFeatureCount)
     */
    signal?: AbortSignal;
  }

  export interface GeoJSONLayerViewQueryFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#queryFeatures)
     */
    signal?: AbortSignal;
  }

  export interface GeoJSONLayerViewQueryObjectIdsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#queryObjectIds)
     */
    signal?: AbortSignal;
  }

  interface GeoRSSLayerView extends LayerView {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoRSSLayerView.html#highlight)
     *
     * @param target The feature(s) to highlight.
     *
     */
    highlight(target?: Graphic | Graphic[]): Handle;
  }

  interface GeoRSSLayerViewProperties extends LayerViewProperties {}

  interface GraphicsLayerView extends LayerView {
    /**
     * Highlights the given feature(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GraphicsLayerView.html#highlight)
     *
     * @param target The feature(s) to highlight. When passing a graphic or array of graphics, each feature musthave a valid `objectID`. You may alternatively pass one or more objectIDs as a single number oran array.
     *
     */
    highlight(target?: Graphic | Graphic[] | number | number[]): Handle;
    /**
     * Returns all graphics available for drawing in the layer viewas a [collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GraphicsLayerView.html#queryGraphics)
     *
     *
     */
    queryGraphics(): Collection<Graphic>;
  }

  interface GraphicsLayerViewProperties extends LayerViewProperties {}

  interface ImageryLayerView extends LayerView {
    /**
     * An object that provides the user access to[pixels](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#pixels) and their values in the layer.See the object specifications table below for details about each property. This objectis used as input in the [pixelFilter()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#pixelFilter) functionfor filtering and processing each pixel in the block.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-ImageryLayerView.html#pixelData)
     */
    pixelData: ImageryLayerViewPixelData;
  }

  interface ImageryLayerViewConstructor {
    new (properties?: ImageryLayerViewProperties): ImageryLayerView;
  }

  export const ImageryLayerView: ImageryLayerViewConstructor;

  interface ImageryLayerViewProperties extends LayerViewProperties {
    /**
     * An object that provides the user access to[pixels](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#pixels) and their values in the layer.See the object specifications table below for details about each property. This objectis used as input in the [pixelFilter()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#pixelFilter) functionfor filtering and processing each pixel in the block.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-ImageryLayerView.html#pixelData)
     */
    pixelData?: ImageryLayerViewPixelData;
  }

  export interface ImageryLayerViewPixelData extends Object {
    /**
     * The extent of the `pixelBlock`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-ImageryLayerView.html#pixelData)
     */
    extent?: Extent;
    /**
     * An object representingthe pixels in the view. This provides the user access to each pixel on the client via the`pixels` property of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-ImageryLayerView.html#pixelData)
     */
    pixelBlock: PixelBlock;
  }

  interface KMLLayerView extends LayerView {
    /**
     * A collection of all the [MapImages](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-KMLLayerView.html#MapImage) from visible sublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-KMLLayerView.html#allVisibleMapImages)
     */
    readonly allVisibleMapImages: Collection<KMLLayerViewMapImage>;
    /**
     * A collection of all the points from visible sublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-KMLLayerView.html#allVisiblePoints)
     */
    readonly allVisiblePoints: Collection<Point>;
    /**
     * A collection of all the polygons from visible sublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-KMLLayerView.html#allVisiblePolygons)
     */
    readonly allVisiblePolygons: Collection<Polygon>;
    /**
     * A collection of all the polylines from visible sublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-KMLLayerView.html#allVisiblePolylines)
     */
    readonly allVisiblePolylines: Collection<Polyline>;
  }

  interface KMLLayerViewProperties extends LayerViewProperties {}

  /**
   * **MapImage** represents an image overlay draped onto the terrain.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-KMLLayerView.html#MapImage)
   */
  export interface KMLLayerViewMapImage extends Object {
    /**
     * Map image id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-KMLLayerView.html#MapImage)
     */
    id: number;
    /**
     * URL to the map image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-KMLLayerView.html#MapImage)
     */
    href: string;
    /**
     * The [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of the map image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-KMLLayerView.html#MapImage)
     */
    Extent: Extent;
    /**
     * Rotation of the map image about its center, in degrees. Values can be ±180. The default is 0 (north). Rotations are specified in a counterclockwise direction.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-KMLLayerView.html#MapImage)
     */
    rotation: number;
  }

  interface LayerView extends Accessor, corePromise {
    /**
     * The layer being viewed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html#layer)
     */
    readonly layer: Layer;
    /**
     * Value is `true` if the layer is suspended (i.e., layer will not redraw or updateitself when the extent changes).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html#suspended)
     */
    readonly suspended: boolean;
    /**
     * Value is `true` when the layer is updating; for example, ifit is in the process of fetching data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html#updating)
     *
     * @default false
     */
    readonly updating: boolean;
    /**
     * When `true`, the layer is visible in the view. Set this property to `false`to hide the layer from the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html#visible)
     *
     * @default true
     */
    visible: boolean;
  }

  interface LayerViewConstructor {
    new (properties?: LayerViewProperties): LayerView;
  }

  export const LayerView: LayerViewConstructor;

  interface LayerViewProperties {
    /**
     * When `true`, the layer is visible in the view. Set this property to `false`to hide the layer from the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html#visible)
     *
     * @default true
     */
    visible?: boolean;
  }

  interface SceneLayerView extends LayerView {
    /**
     * A list of attribute fields fetched for each feature including fields required for layer[rendering](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#renderer) and additional fields defined on the[SceneLayer.outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#outFields).The availableFields is populated when the layer view is finished [updating](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#updating). Use this list whenquerying features on the [client-side](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#queryFeatures).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#availableFields)
     */
    readonly availableFields: string[];
    /**
     * Applies a client-side [FeatureFilter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html) to the displayed data.Only the features that satisfy the filter are displayed.For 3D object scene layers, only spatial filters with[spatialRelationship](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#spatialRelationship)set to `contains`, `intersects` or `disjoint` are supported.The fields to be used for the filter must be present in the layer view's[availableFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#availableFields) list.The [timeExtent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#timeExtent) property is not supported on a SceneLayerView filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#filter)
     */
    filter: FeatureFilter;
    /**
     * The maximum number of features that can be displayed at a time. This setting currently only applies topoint scene layers. By default, the maximum number of features is estimated automatically depending on the symbology,geometry complexity, memory consumption and display quality profile.Changing this setting to a higher value may lead to a significant decrease in performance and increase inmemory usage.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#maximumNumberOfFeatures)
     */
    maximumNumberOfFeatures: number;
    /**
     * Signifies whether the maximum number of features has been exceeded. Not all features could be displayedwhen this value is `true`. This setting currently only applies to point scene layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#maximumNumberOfFeaturesExceeded)
     */
    maximumNumberOfFeaturesExceeded: boolean;

    /**
     * Creates query parameter object that can be used to fetch features as they are beingdisplayed. It sets the query parameter's [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outFields)property to `["*"]` amd [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnGeometry) to `true`.The output spatial reference is set to the spatial reference of the view. The filter that currentlyapplies to the layerview is also incorporated in the returned query object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#createQuery)
     *
     *
     */
    createQuery(): Query;
    /**
     * Highlights the given feature(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#highlight)
     *
     * @param target The feature(s) to highlight. When passing a graphic or array of graphics, each feature musthave a valid `objectID`. You may alternatively pass one or more objectIDs as a single number oran array.
     *
     */
    highlight(target?: Graphic | Graphic[] | number | number[]): Handle;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#queryExtent)
     *
     * @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.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryExtent(query?: Query | QueryProperties, options?: SceneLayerViewQueryExtentOptions): IPromise<any>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#queryFeatureCount)
     *
     * @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 featuresvisible in the view, set the `geometry` parameter in the query object to the view's extent.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryFeatureCount(
      query?: Query | QueryProperties,
      options?: SceneLayerViewQueryFeatureCountOptions
    ): IPromise<number>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#queryFeatures)
     *
     * @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 along with their attributesspecified in [availableFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#availableFields). To only return featuresvisible in the view, set the `geometry` parameter in the query object to the view's extent.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryFeatures(query?: Query | QueryProperties, options?: SceneLayerViewQueryFeaturesOptions): IPromise<FeatureSet>;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#queryObjectIds)
     *
     * @param query Specifies the attributes of the query.If query parameters are not provided, all loaded features are returned.
     * @param options An object with the following properties.
     * @param options.signal Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    queryObjectIds(query?: Query | QueryProperties, options?: SceneLayerViewQueryObjectIdsOptions): IPromise<number[]>;
  }

  interface SceneLayerViewProperties extends LayerViewProperties {
    /**
     * Applies a client-side [FeatureFilter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html) to the displayed data.Only the features that satisfy the filter are displayed.For 3D object scene layers, only spatial filters with[spatialRelationship](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#spatialRelationship)set to `contains`, `intersects` or `disjoint` are supported.The fields to be used for the filter must be present in the layer view's[availableFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#availableFields) list.The [timeExtent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#timeExtent) property is not supported on a SceneLayerView filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#filter)
     */
    filter?: FeatureFilterProperties;
    /**
     * The maximum number of features that can be displayed at a time. This setting currently only applies topoint scene layers. By default, the maximum number of features is estimated automatically depending on the symbology,geometry complexity, memory consumption and display quality profile.Changing this setting to a higher value may lead to a significant decrease in performance and increase inmemory usage.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#maximumNumberOfFeatures)
     */
    maximumNumberOfFeatures?: number;
    /**
     * Signifies whether the maximum number of features has been exceeded. Not all features could be displayedwhen this value is `true`. This setting currently only applies to point scene layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#maximumNumberOfFeaturesExceeded)
     */
    maximumNumberOfFeaturesExceeded?: boolean;
  }

  export interface SceneLayerViewQueryExtentOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#queryExtent)
     */
    signal?: AbortSignal;
  }

  export interface SceneLayerViewQueryFeatureCountOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#queryFeatureCount)
     */
    signal?: AbortSignal;
  }

  export interface SceneLayerViewQueryFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#queryFeatures)
     */
    signal?: AbortSignal;
  }

  export interface SceneLayerViewQueryObjectIdsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.  The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named `AbortError` when an abort is signaled.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#queryObjectIds)
     */
    signal?: AbortSignal;
  }

  interface StreamLayerView extends LayerView, Evented {
    /**
     * The error that explains an unsuccessful attempt to connect to thestream service or an unexpected disconnection from the stream service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#connectionError)
     */
    readonly connectionError: Error;
    /**
     * The status of the Web Socket connection with the stream service. This propertycan be watched to see if the connection is lost unexpectedly.**Possible Values:** connected | disconnected
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#connectionStatus)
     */
    readonly connectionStatus: string;
    /**
     * The geometry and attribute filter. Only the features that satisfy the filter are displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#filter)
     */
    readonly filter: FeatureFilter;
    /**
     * Contains the collection of [graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) visible in the layer viewfor the live stream. Graphics may be removed from the layer view by calling the[removeAll()](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html#removeAll) method from[Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html).**This property is deprecated. Use [queryFeatures](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#queryFeatures) method instead.**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#graphics)
     */
    graphics: Collection<Graphic>;

    /**
     * Opens a web socket connection with the stream service to start receiving messages.This is called internally when the StreamLayeris added to a view.**The layer will now automatically connect when it is added to a view.**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#connect)
     *
     *
     */
    connect(): IPromise<any>;
    /**
     * Closes the web socket connection with the stream service. This is called internallywhen the StreamLayer is removed from a view. To verify when the connection is closed,watch the [connectionStatus](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#connectionStatus) property.**The layer will now automatically disconnect when it is removed a view.**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#disconnect)
     *
     *
     */
    disconnect(): void;
    /**
     * **This method is deprecated. Update [filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#filter) directly instead.** Updates the [filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#filter) on the StreamLayerView. The filter is updated only onthe layer view from which it is called. To update the filter on all layer viewsgenerated from a common layer, use the[StreamLayer.updateFilter()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#updateFilter) method.If the input `filter` object is `undefined` or `null`,the spatial and attribute filters are removed.Filter changes only apply to incoming features. Features already displayed in theview will be removed automatically.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#updateFilter)
     *
     * @param filter Updates the spatial and attribute [filters](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#filter).                              If `null`, all filters are cleared.
     * @param filter.geometry A spatial filter forfiltering features.Only features that intersect the given geometry are displayed in the view.If `null`, the spatial filter is cleared.
     * @param filter.where A SQL where clause used to filter features                       by attributes. If `null`, the attribute filter is cleared.
     *
     */
    updateFilter(filter: StreamLayerViewUpdateFilterFilter): IPromise<any>;

    on(name: "data-received", eventHandler: StreamLayerViewDataReceivedEventHandler): IHandle;
  }

  interface StreamLayerViewConstructor {
    new (properties?: StreamLayerViewProperties): StreamLayerView;
  }

  export const StreamLayerView: StreamLayerViewConstructor;

  interface StreamLayerViewProperties extends LayerViewProperties {
    /**
     * Contains the collection of [graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) visible in the layer viewfor the live stream. Graphics may be removed from the layer view by calling the[removeAll()](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html#removeAll) method from[Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html).**This property is deprecated. Use [queryFeatures](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#queryFeatures) method instead.**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#graphics)
     */
    graphics?: CollectionProperties<GraphicProperties>;
  }

  export interface StreamLayerViewDataReceivedEvent {}

  export interface StreamLayerViewUpdateFilterFilter extends Object {
    /**
     * A spatial filter forfiltering features.Only features that intersect the given geometry are displayed in the view.If `null`, the spatial filter is cleared.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#updateFilter)
     */
    geometry?: Extent;
    /**
     * A SQL where clause used to filter features                       by attributes. If `null`, the attribute filter is cleared.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#updateFilter)
     */
    where?: string;
  }

  interface FeatureEffect extends Accessor, JSONSupport {
    /**
     * The graphical [css filter](https://developer.mozilla.org/en-US/docs/Web/CSS/filter)operation applied to the features that do not meet the [filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#filter) requirements.Currently, [grayscale](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/grayscale),[sepia](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/sepia),[hue-rotate](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/hue-rotate),[invert](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/invert),[opacity](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/opacity),[brightness](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/brightness) and[contrast](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/contrast)css filter functions are supported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#excludedEffect)
     */
    excludedEffect: string;
    /**
     * Indicates if labels for features that are [excluded](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#excludedEffect) from the effect are visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#excludedLabelsVisible)
     *
     * @default false
     */
    excludedLabelsVisible: boolean;
    /**
     * The filter that drives the effect.Features that meet the requirements specified in the filter will have the [includedEffect](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#includedEffect) appliedwhile features that do not meet meet the filter requirements will have the [excludedEffect](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#excludedEffect) applied.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#filter)
     */
    filter: FeatureFilter;
    /**
     * The graphical [css filter](https://developer.mozilla.org/en-US/docs/Web/CSS/filter)operation applied to the features that meet the [filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#filter) requirements.Currently, [grayscale](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/grayscale),[sepia](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/sepia),[hue-rotate](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/hue-rotate),[invert](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/invert),[opacity](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/opacity),[brightness](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/brightness) and[contrast](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/contrast)css filter functions are supported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#includedEffect)
     */
    includedEffect: string;

    /**
     * Creates a deep clone of FeatureEffect object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#clone)
     *
     *
     */
    clone(): FeatureEffect;
  }

  interface FeatureEffectConstructor {
    new (properties?: FeatureEffectProperties): FeatureEffect;

    fromJSON(json: any): FeatureEffect;
  }

  export const FeatureEffect: FeatureEffectConstructor;

  interface FeatureEffectProperties {
    /**
     * The graphical [css filter](https://developer.mozilla.org/en-US/docs/Web/CSS/filter)operation applied to the features that do not meet the [filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#filter) requirements.Currently, [grayscale](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/grayscale),[sepia](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/sepia),[hue-rotate](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/hue-rotate),[invert](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/invert),[opacity](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/opacity),[brightness](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/brightness) and[contrast](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/contrast)css filter functions are supported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#excludedEffect)
     */
    excludedEffect?: string;
    /**
     * Indicates if labels for features that are [excluded](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#excludedEffect) from the effect are visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#excludedLabelsVisible)
     *
     * @default false
     */
    excludedLabelsVisible?: boolean;
    /**
     * The filter that drives the effect.Features that meet the requirements specified in the filter will have the [includedEffect](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#includedEffect) appliedwhile features that do not meet meet the filter requirements will have the [excludedEffect](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#excludedEffect) applied.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#filter)
     */
    filter?: FeatureFilterProperties;
    /**
     * The graphical [css filter](https://developer.mozilla.org/en-US/docs/Web/CSS/filter)operation applied to the features that meet the [filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#filter) requirements.Currently, [grayscale](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/grayscale),[sepia](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/sepia),[hue-rotate](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/hue-rotate),[invert](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/invert),[opacity](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/opacity),[brightness](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/brightness) and[contrast](https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/contrast)css filter functions are supported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#includedEffect)
     */
    includedEffect?: string;
  }

  interface FeatureFilter extends Accessor, JSONSupport {
    /**
     * Specifies a search distance from a given [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#geometry) in a spatial filter.The [units property](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#units) indicates the unit of measurement. In essence, setting this propertycreates a buffer at the specified size around the input [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#geometry). The filter will use thatbuffer to display features in the layer or layer view that adhere to the to the indicated [spatial relationship](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#spatialRelationship).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#distance)
     */
    distance: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#geometry)
     */
    geometry: Geometry;
    /**
     * An array of objectIds of the features to be filtered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#objectIds)
     */
    objectIds: number[];
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#spatialRelationship)
     *
     * @default intersects
     */
    spatialRelationship: string;
    /**
     * A range of time with start and end date. Only the features that fall within this time extent will be displayed.The Date field to be used for `timeExtent` must be added to [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#outFields)list when the layer is initialized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#timeExtent)
     *
     * @default null
     */
    timeExtent: TimeExtent;
    /**
     * The unit for calculating the buffer distance when [distance](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#distance) is specified in a spatial filter.If `units` is not specified, the unit is derived from the filter [geometry's](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#geometry) spatial reference.**Possible Values:** feet | miles | nautical-miles | us-nautical-miles | meters | kilometers
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#units)
     *
     * @default null
     */
    units: string;
    /**
     * A where clause for the feature filter. Any legal SQL92 where clause operating on the fields in the layer is allowed.Be sure to have the correct sequence of single and double quotes when writing the where clause in JavaScript.The field to be used for `where` clause must be added to [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#outFields)list when the layer is initialized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#where)
     */
    where: string;

    /**
     * Creates a deep clone of FeatureFilter object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#clone)
     *
     *
     */
    clone(): FeatureFilter;
    /**
     * Creates [query](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html) parameters that can be used to fetch features thatsatisfy the layer's current filters and definitions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#createQuery)
     *
     *
     */
    createQuery(): Query;
  }

  interface FeatureFilterConstructor {
    new (properties?: FeatureFilterProperties): FeatureFilter;

    fromJSON(json: any): FeatureFilter;
  }

  export const FeatureFilter: FeatureFilterConstructor;

  interface FeatureFilterProperties {
    /**
     * Specifies a search distance from a given [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#geometry) in a spatial filter.The [units property](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#units) indicates the unit of measurement. In essence, setting this propertycreates a buffer at the specified size around the input [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#geometry). The filter will use thatbuffer to display features in the layer or layer view that adhere to the to the indicated [spatial relationship](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#spatialRelationship).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#distance)
     */
    distance?: number;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#geometry)
     */
    geometry?: GeometryProperties;
    /**
     * An array of objectIds of the features to be filtered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#objectIds)
     */
    objectIds?: number[];
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#spatialRelationship)
     *
     * @default intersects
     */
    spatialRelationship?: string;
    /**
     * A range of time with start and end date. Only the features that fall within this time extent will be displayed.The Date field to be used for `timeExtent` must be added to [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#outFields)list when the layer is initialized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#timeExtent)
     *
     * @default null
     */
    timeExtent?: TimeExtentProperties;
    /**
     * The unit for calculating the buffer distance when [distance](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#distance) is specified in a spatial filter.If `units` is not specified, the unit is derived from the filter [geometry's](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#geometry) spatial reference.**Possible Values:** feet | miles | nautical-miles | us-nautical-miles | meters | kilometers
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#units)
     *
     * @default null
     */
    units?: string;
    /**
     * A where clause for the feature filter. Any legal SQL92 where clause operating on the fields in the layer is allowed.Be sure to have the correct sequence of single and double quotes when writing the where clause in JavaScript.The field to be used for `where` clause must be added to [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#outFields)list when the layer is initialized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#where)
     */
    where?: string;
  }

  interface MapView extends View, MapViewBase, BreakpointsOwner {
    /**
     * Represents the view's center point; when setting the center, you may pass a[Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) instance or an array of numbers representinga longitude/latitude pair (`[-100.4593, 36.9014]`).Setting the center immediately changes the current view. For animatingthe view, see [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#goTo).If set in the constructor, thisproperty will be ignored if the [viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#viewpoint) or [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#extent)properties are also set in the constructor.The returned [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) object is always in the spatial reference ofthe [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#map) and may be modified internally. To persist the returnedobject, create a clone using [Point.clone()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#clone).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#center)
     */
    center: Point;
    /**
     * Specifies constraints to [scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale), [zoom](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#zoom), and [rotation](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#rotation) that may beapplied to the MapView. See object specification below.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)
     */
    constraints: MapViewConstraints;
    /**
     * The extent represents the visible portion of a [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) within the view as an instance of [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html).Setting the extent immediately changes the view without animation. To animatethe view, see [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#goTo).The returned [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) object is an internalreference which may be modified internally. To persist the returnedobject, create a copy using [Extent.clone()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#clone).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#extent)
     *
     * @default null
     */
    extent: Extent;
    /**
     * Options for configuring the highlight. Use the highlight method on theappropriate [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) to highlight a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)
     */
    highlightOptions: MapViewHighlightOptions;
    /**
     * Defines which anchor stays still while resizing the browser window. The default, `center`, ensures the view's center point remains constantly visible as the window size changes. The otheroptions allow  the respective portion of the view to remain visible when the window's size is changed.**Possible values:** center | left | right | top | bottom | top-left | top-right | bottom-left | bottom-right
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#resizeAlign)
     *
     * @default center
     */
    resizeAlign: string;
    /**
     * The clockwise rotation of due north in relation to the top of the view in degrees.The view may be rotated by directly settingthe rotation or by using the following mouse event: `Right-click + Drag`.Map rotation may be disabled by setting the `rotationEnabled` propertyin [constraints](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints) to `false`. See the code snippet below foran example of this.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#rotation)
     *
     * @default 0
     */
    rotation: number;
    /**
     * Represents the map scale at the center of the view.Setting the scale immediately changes the view. For animatingthe view, see [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#goTo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale)
     */
    scale: number;
    /**
     * Represents the current view as a [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) or point of observation on the view.Setting the viewpoint immediately changes the current view. For animatingthe view, see [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#goTo).The returned [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) object is an internalreference which may be modified internally. To persist the returnedobject, create a copy using [Viewpoint.clone()](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html#clone).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#viewpoint)
     */
    viewpoint: Viewpoint;
    /**
     * Represents the level of detail (LOD) at the center of the view.Setting the zoom immediately changes the current view. For animatingthe view, see [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#goTo).Setting this property in conjunction with [center](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#center) is a convenient wayto set the initial extent of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#zoom)
     */
    zoom: number;

    /**
     * Sets the focus on the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#focus)
     *
     *
     */
    focus(): void;
    /**
     * Returns the topmost feature from each layer that intersects the specified screen coordinates. The following layer typeswill return a result if a hit is made on an intersecting feature:[GraphicsLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html), [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html), [CSVLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html),[GeoRSSLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoRSSLayer.html), [KMLLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-KMLLayer.html), and [StreamLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html).At 4.6 and later, a hit test will always return a result from [VectorTileLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html). However, the result will onlyindicate the ID and the name of the layer within the [vector tile style](https://doc.arcgis.com/en/arcgis-online/reference/tile-layers.htm#ESRI_SECTION1_8F68399EB47B48FF9EF46719FCC96978)that intersects the screen point. Detailed attribute and spatial information about the actual feature represented in the layer is not returned.HitTest results returned from VectorTileLayers are primarily used for [Vector tile style editor applications](https://maps.esri.com/jg/VectorBasemapStyleEditor/index.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#hitTest)
     *
     * @param screenPoint The screen coordinates (or native mouse event) of the click on the view.
     *
     */
    hitTest(screenPoint: ScreenPoint | MouseEvent): IPromise<HitTestResult>;
    /**
     * Registers an event handler on the instance. Call this method to hook anevent with a listener. See the [Events summary table](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#events-summary) for a listof listened events.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#on)
     *
     * @param type The name of the event or events to listen for.
     * @param modifiersOrHandler Additional modifier keys to filter events.Please see [Key Values](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)for possible values. All the standard key values are supported.Alternatively, if no modifiers are required, the function will call when the event fires.The following events don't support modifier keys: `blur`, `focus`, `layerview-create`, `layerview-destroy`,`resize`.
     * @param handler The function to call when the event is fired, if modifiers were specified.
     *
     */
    on(type: string | string[], modifiersOrHandler: string[] | EventHandler, handler?: EventHandler): IHandle;
    /**
     * Create a screenshot of the current view. Screenshots include only elementsthat are rendered on the canvas (all geographical elements), but excludes overlayedDOM elements (UI, popups, measurement labels, etc.). By default, a screenshot of the whole viewis created. Different options allow for creating different types of screenshots,including taking screenshots at different aspect ratios, different resolutionsand creating thumbnails.Screenshots are always taken inside the padded area of the view (see[padding](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#padding)).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#takeScreenshot)
     *
     * @param options Screenshot options.
     * @param options.format The format of the resulting encoded data url.**Possible values**: jpg | png.
     * @param options.layers When used, only the visible layers in this list will be included in the output.
     * @param options.quality The quality (0 to 100) of the encoded image when encoding  as `jpg`.
     * @param options.width The width of the screenshot (defaults to the area width). The  height will be derived automatically if left unspecified, according to the aspect ratio of the  of the screenshot area.
     * @param options.height The height of the screenshot (defaults to the area height). The  width will be derived automatically if left unspecified, according to the aspect ratio of the  screenshot area.
     * @param options.area Specifies whether to take a screenshot of a specific  area of the view. The area coordinates are relative to the origin of the padded view (see  [padding](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#padding)) and will be clipped to the  view size. Defaults to the whole view (padding excluded).
     * @param options.ignorePadding Indicates whether view padding should be ignored.  Set this property to `true` to allow padded areas to be included in the screenshot.
     *
     */
    takeScreenshot(options?: MapViewTakeScreenshotOptions): IPromise<Screenshot>;
    /**
     * Converts the given screen point to a [map point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html).The screen point represents a point in termsof pixels relative to the top-left corner of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#toMap)
     *
     * @param screenPoint The location on the screen (or native mouse event) to convert.
     *
     */
    toMap(screenPoint: ScreenPoint | MouseEvent): Point;
    /**
     * Converts the given [map point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) to ascreen point.The screen point represents a point in termsof pixels relative to the top-left corner of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#toScreen)
     *
     * @param point A point geometry.
     *
     */
    toScreen(point: Point): ScreenPoint;

    on(name: "resize", eventHandler: MapViewResizeEventHandler): IHandle;

    on(name: "resize", modifiers: string[], eventHandler: MapViewResizeEventHandler): IHandle;

    on(name: "layerview-create", eventHandler: MapViewLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create", modifiers: string[], eventHandler: MapViewLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: MapViewLayerviewCreateErrorEventHandler): IHandle;

    on(
      name: "layerview-create-error",
      modifiers: string[],
      eventHandler: MapViewLayerviewCreateErrorEventHandler
    ): IHandle;

    on(name: "layerview-destroy", eventHandler: MapViewLayerviewDestroyEventHandler): IHandle;

    on(name: "layerview-destroy", modifiers: string[], eventHandler: MapViewLayerviewDestroyEventHandler): IHandle;

    on(name: "click", eventHandler: MapViewClickEventHandler): IHandle;

    on(name: "click", modifiers: string[], eventHandler: MapViewClickEventHandler): IHandle;

    on(name: "double-click", eventHandler: MapViewDoubleClickEventHandler): IHandle;

    on(name: "double-click", modifiers: string[], eventHandler: MapViewDoubleClickEventHandler): IHandle;

    on(name: "immediate-click", eventHandler: MapViewImmediateClickEventHandler): IHandle;

    on(name: "immediate-click", modifiers: string[], eventHandler: MapViewImmediateClickEventHandler): IHandle;

    on(name: "hold", eventHandler: MapViewHoldEventHandler): IHandle;

    on(name: "hold", modifiers: string[], eventHandler: MapViewHoldEventHandler): IHandle;

    on(name: "drag", eventHandler: MapViewDragEventHandler): IHandle;

    on(name: "drag", modifiers: string[], eventHandler: MapViewDragEventHandler): IHandle;

    on(name: "mouse-wheel", eventHandler: MapViewMouseWheelEventHandler): IHandle;

    on(name: "mouse-wheel", modifiers: string[], eventHandler: MapViewMouseWheelEventHandler): IHandle;

    on(name: "key-down", eventHandler: MapViewKeyDownEventHandler): IHandle;

    on(name: "key-down", modifiers: string[], eventHandler: MapViewKeyDownEventHandler): IHandle;

    on(name: "key-up", eventHandler: MapViewKeyUpEventHandler): IHandle;

    on(name: "key-up", modifiers: string[], eventHandler: MapViewKeyUpEventHandler): IHandle;

    on(name: "pointer-down", eventHandler: MapViewPointerDownEventHandler): IHandle;

    on(name: "pointer-down", modifiers: string[], eventHandler: MapViewPointerDownEventHandler): IHandle;

    on(name: "pointer-move", eventHandler: MapViewPointerMoveEventHandler): IHandle;

    on(name: "pointer-move", modifiers: string[], eventHandler: MapViewPointerMoveEventHandler): IHandle;

    on(name: "pointer-up", eventHandler: MapViewPointerUpEventHandler): IHandle;

    on(name: "pointer-up", modifiers: string[], eventHandler: MapViewPointerUpEventHandler): IHandle;

    on(name: "pointer-enter", eventHandler: MapViewPointerEnterEventHandler): IHandle;

    on(name: "pointer-enter", modifiers: string[], eventHandler: MapViewPointerEnterEventHandler): IHandle;

    on(name: "pointer-leave", eventHandler: MapViewPointerLeaveEventHandler): IHandle;

    on(name: "pointer-leave", modifiers: string[], eventHandler: MapViewPointerLeaveEventHandler): IHandle;

    on(name: "focus", eventHandler: MapViewFocusEventHandler): IHandle;

    on(name: "focus", modifiers: string[], eventHandler: MapViewFocusEventHandler): IHandle;

    on(name: "blur", eventHandler: MapViewBlurEventHandler): IHandle;

    on(name: "blur", modifiers: string[], eventHandler: MapViewBlurEventHandler): IHandle;
  }

  interface MapViewConstructor {
    new (properties?: MapViewProperties): MapView;
  }

  export const MapView: MapViewConstructor;

  interface MapViewProperties extends ViewProperties, BreakpointsOwnerProperties {
    /**
     * Represents the view's center point; when setting the center, you may pass a[Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) instance or an array of numbers representinga longitude/latitude pair (`[-100.4593, 36.9014]`).Setting the center immediately changes the current view. For animatingthe view, see [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#goTo).If set in the constructor, thisproperty will be ignored if the [viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#viewpoint) or [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#extent)properties are also set in the constructor.The returned [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) object is always in the spatial reference ofthe [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#map) and may be modified internally. To persist the returnedobject, create a clone using [Point.clone()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#clone).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#center)
     */
    center?: PointProperties | number[];
    /**
     * Specifies constraints to [scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale), [zoom](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#zoom), and [rotation](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#rotation) that may beapplied to the MapView. See object specification below.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)
     */
    constraints?: MapViewConstraints;
    /**
     * The extent represents the visible portion of a [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) within the view as an instance of [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html).Setting the extent immediately changes the view without animation. To animatethe view, see [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#goTo).The returned [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) object is an internalreference which may be modified internally. To persist the returnedobject, create a copy using [Extent.clone()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#clone).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#extent)
     *
     * @default null
     */
    extent?: ExtentProperties;
    /**
     * Options for configuring the highlight. Use the highlight method on theappropriate [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) to highlight a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)
     */
    highlightOptions?: MapViewHighlightOptionsProperties;
    /**
     * Defines which anchor stays still while resizing the browser window. The default, `center`, ensures the view's center point remains constantly visible as the window size changes. The otheroptions allow  the respective portion of the view to remain visible when the window's size is changed.**Possible values:** center | left | right | top | bottom | top-left | top-right | bottom-left | bottom-right
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#resizeAlign)
     *
     * @default center
     */
    resizeAlign?: string;
    /**
     * The clockwise rotation of due north in relation to the top of the view in degrees.The view may be rotated by directly settingthe rotation or by using the following mouse event: `Right-click + Drag`.Map rotation may be disabled by setting the `rotationEnabled` propertyin [constraints](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints) to `false`. See the code snippet below foran example of this.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#rotation)
     *
     * @default 0
     */
    rotation?: number;
    /**
     * Represents the map scale at the center of the view.Setting the scale immediately changes the view. For animatingthe view, see [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#goTo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale)
     */
    scale?: number;
    /**
     * Represents the current view as a [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) or point of observation on the view.Setting the viewpoint immediately changes the current view. For animatingthe view, see [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#goTo).The returned [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) object is an internalreference which may be modified internally. To persist the returnedobject, create a copy using [Viewpoint.clone()](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html#clone).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#viewpoint)
     */
    viewpoint?: ViewpointProperties;
    /**
     * Represents the level of detail (LOD) at the center of the view.Setting the zoom immediately changes the current view. For animatingthe view, see [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#goTo).Setting this property in conjunction with [center](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#center) is a convenient wayto set the initial extent of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#zoom)
     */
    zoom?: number;
  }

  export interface MapViewBlurEvent {
    native: any;

    target: View;
  }

  export interface MapViewClickEvent {
    button: number;

    buttons: number;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface MapViewDoubleClickEvent {
    button: number;

    buttons: number;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface MapViewDragEvent {
    action: string;

    angle: number;

    button: number;

    buttons: number;

    native: any;

    origin: MapViewDragEventOrigin;

    radius: number;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface MapViewFocusEvent {
    native: any;

    target: View;
  }

  /**
   * Object specification for the result of the [hitTest()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#hitTest) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#HitTestResult)
   */
  export interface HitTestResult extends Object {
    /**
     * An array of result objects returned from the [hitTest()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#hitTest).Results are returned when the location of the input screen coordinates intersect a[Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) in the view. See the table below for the specification of eachobject in this array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#HitTestResult)
     */
    results: HitTestResultResults[];
  }

  export interface MapViewHoldEvent {
    button: number;

    buttons: number;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface MapViewImmediateClickEvent {
    button: number;

    buttons: number;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface MapViewKeyDownEvent {
    key: string;

    native: any;

    repeat: boolean;

    stopPropagation: Function;

    timestamp: number;

    type: string;
  }

  export interface MapViewKeyUpEvent {
    key: string;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: string;
  }

  export interface MapViewLayerviewCreateErrorEvent {
    error: Error;

    layer: Layer;
  }

  export interface MapViewLayerviewCreateEvent {
    layer: Layer;

    layerView: LayerView;
  }

  export interface MapViewLayerviewDestroyEvent {
    layer: Layer;

    layerView: LayerView;
  }

  export interface MapViewConstraints extends Object {
    /**
     * An array of [LODs](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LOD.html).                                                 If not specified, this value is read from the                                                 [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html). This property may be                                                 [autocast](https://developers.arcgis.com/javascript/latest/guide/autocasting/index.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)
     */
    lods?: LOD[];
    /**
     * The minimum [scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale) the user is allowed to zoom to within the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)
     */
    minScale?: number;
    /**
     * The maximum [scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale) the user is allowed to zoom to within the view. Setting                       this value to `0` allows the user to overzoom layer tiles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)
     */
    maxScale?: number;
    /**
     * The minimum [zoom](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#zoom) level the user is allowed to zoom to within the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)
     */
    minZoom?: number;
    /**
     * The maximum [zoom](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#zoom) level the user is allowed to zoom to within the view. Setting                       this value to `0` allows the user to overzoom layer tiles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)
     */
    maxZoom?: number;
    /**
     * When `true`, the view snaps to the next LOD when zooming in or out.                                 When `false`, the zoom is continuous. This does not apply when zooming in/out using two finger pinch in/out.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)
     *
     * @default true
     */
    snapToZoom?: boolean;
    /**
     * Indicates whether the user can rotate the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)
     *
     * @default true
     */
    rotationEnabled?: boolean;
    /**
     * A read-only property that specifies the levels of                                                  detail (LODs) read from the [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)
     */
    effectiveLODs?: LOD[];
    /**
     * A read-only property that specifies the minimum [zoom](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#zoom) level the user                                                  is allowed to zoom to within the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)
     */
    effectiveMinZoom?: number;
    /**
     * A read-only property that specifies the maximum [zoom](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#zoom) level the user                                                  is allowed to zoom to within the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)
     */
    effectiveMaxZoom?: number;
    /**
     * A read-only property that specifies the minimum [scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale) the                                                 user is allowed to zoom to within the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)
     */
    effectiveMinScale?: number;
    /**
     * A read-only property that specifies the maximum [scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale)                                                  the user is allowed to zoom to within the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)
     */
    effectiveMaxScale?: number;
  }

  export interface MapViewHighlightOptionsProperties extends Object {
    /**
     * The color of the highlight.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)
     *
     * @default #00ffff
     */
    color?: Color | number[] | string;
    /**
     * The opacity of the highlight halo. This will be multiplied                               with the opacity specified in `color`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)
     *
     * @default 1
     */
    haloOpacity?: number;
    /**
     * The opacity of the fill (area within the halo). This will be                               multiplied with the opacity specified in `color`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)
     *
     * @default 0.25
     */
    fillOpacity?: number;
  }

  export interface MapViewHighlightOptions extends AnonymousAccessor {
    /**
     * The color of the highlight.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)
     *
     * @default #00ffff
     */
    color?: Color;
    /**
     * The opacity of the highlight halo. This will be multiplied                               with the opacity specified in `color`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)
     *
     * @default 1
     */
    haloOpacity?: number;
    /**
     * The opacity of the fill (area within the halo). This will be                               multiplied with the opacity specified in `color`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)
     *
     * @default 0.25
     */
    fillOpacity?: number;
  }

  export interface MapViewTakeScreenshotOptions extends Object {
    /**
     * The format of the resulting encoded data url.**Possible values**: jpg | png.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#takeScreenshot)
     *
     * @default jpg
     */
    format?: string;
    /**
     * When used, only the visible layers in this list will be included in the output.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#takeScreenshot)
     */
    layers?: Layer[];
    /**
     * The quality (0 to 100) of the encoded image when encoding  as `jpg`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#takeScreenshot)
     *
     * @default 98
     */
    quality?: number;
    /**
     * The width of the screenshot (defaults to the area width). The  height will be derived automatically if left unspecified, according to the aspect ratio of the  of the screenshot area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#takeScreenshot)
     */
    width?: number;
    /**
     * The height of the screenshot (defaults to the area height). The  width will be derived automatically if left unspecified, according to the aspect ratio of the  screenshot area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#takeScreenshot)
     */
    height?: number;
    /**
     * Specifies whether to take a screenshot of a specific  area of the view. The area coordinates are relative to the origin of the padded view (see  [padding](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#padding)) and will be clipped to the  view size. Defaults to the whole view (padding excluded).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#takeScreenshot)
     */
    area?: MapViewTakeScreenshotOptionsArea;
    /**
     * Indicates whether view padding should be ignored.  Set this property to `true` to allow padded areas to be included in the screenshot.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#takeScreenshot)
     */
    ignorePadding?: boolean;
  }

  export interface MapViewTakeScreenshotOptionsArea extends Object {
    /**
     * The x coordinate of the area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#takeScreenshot)
     */
    x?: number;
    /**
     * The y coordinate of the area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#takeScreenshot)
     */
    y?: number;
    /**
     * The width of the area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#takeScreenshot)
     */
    width?: number;
    /**
     * The height of the area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#takeScreenshot)
     */
    height?: number;
  }

  export interface MapViewMouseWheelEvent {
    deltaY: number;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface MapViewPointerDownEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: string;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface MapViewPointerEnterEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: string;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface MapViewPointerLeaveEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: string;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface MapViewPointerMoveEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: string;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface MapViewPointerUpEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: string;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface MapViewResizeEvent {
    height: number;

    oldHeight: number;

    oldWidth: number;

    width: number;
  }

  /**
   * An object representing a point on the screen.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#ScreenPoint)
   */
  export interface ScreenPoint extends Object {
    /**
     * The x coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#ScreenPoint)
     */
    x: number;
    /**
     * The y coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#ScreenPoint)
     */
    y: number;
  }

  /**
   * Object returned when [takeScreenshot()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#takeScreenshot) promise resolves:
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#Screenshot)
   */
  export interface Screenshot extends Object {
    /**
     * A data url representing the screenshot.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#Screenshot)
     */
    dataUrl: string;
    /**
     * The raw RGBA image data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#Screenshot)
     */
    data: ImageData;
  }

  interface MapViewBase {
    /**
     * Sets the view to a given target. The target parameter can be one of the following:* `[longitude, latitude]` pair of coordinates* [Geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html) (or array of [Geometry[]](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html))* [Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) (or array of [Graphic[]](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html))* [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html)* Object with a combination of `target`, `center`, `scale` and `rotation`  properties (with `target` being any of the types listed above). The `center` property  is provided as a convenience to animate the [MapView.center](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapViewBase.html#center)  and is equivalent to specifying the `target` with the center [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html).This function returns a promise which resolves as soon as the new view has been set to the target.If the transition is animated, then the ongoing animation can be obtained using[MapView.animation](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapViewBase.html#animation).If a tiled map service is used as the basemap and `snapToZoom` property is set to `true` in [constraints](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapViewBase.html#constraints),the `goTo` method will zoom in to fit the defined `target`.If `snapToZoom` property is set to `false`, the `goTo` method will zoom to the exact `target`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapViewBase.html#goTo)
     *
     * @param target The target location/viewpoint to animate to. When using an object for `target`, use the propertiesin the table below.
     * @param target.target The target of the animation.
     * @param target.center The [MapView.center](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapViewBase.html#center) to go to.
     * @param target.scale The [MapView.scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapViewBase.html#scale) to go to.
     * @param target.zoom The [MapView.zoom](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapViewBase.html#zoom) to go to.
     * @param options Animation options. See properties below for object specifications.
     * @param options.animate Indicates if the transition to the new view should be animated. If set to false, `duration` and `easing` properties are ignored.
     * @param options.duration The duration of the animation in milliseconds.
     * @param options.easing The easing function used for the animation. See [easing functions](https://easings.net/) for graphical representations of these functions.
     * @param options.signal An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the animation.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).**Possible Values:** linear | ease | ease-in | ease-out | ease-in-out
     *
     */
    goTo(
      target:
        | number[]
        | Geometry
        | Geometry[]
        | Collection<Geometry>
        | Graphic
        | Graphic[]
        | Collection<Graphic>
        | Viewpoint
        | MapViewBaseGoToTarget,
      options?: MapViewBaseGoToOptions
    ): IPromise<any>;
  }

  interface MapViewBaseConstructor {
    new (): MapViewBase;
  }

  export const MapViewBase: MapViewBaseConstructor;

  export interface MapViewBaseGoToOptions extends Object {
    /**
     * Indicates if the transition to the new view should be animated. If set to false, `duration` and `easing` properties are ignored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapViewBase.html#goTo)
     *
     * @default true
     */
    animate?: boolean;
    /**
     * The duration of the animation in milliseconds.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapViewBase.html#goTo)
     *
     * @default 200
     */
    duration?: number;
    /**
     * The easing function used for the animation. See [easing functions](https://easings.net/) for graphical representations of these functions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapViewBase.html#goTo)
     *
     * @default ease
     */
    easing?: string | Function;
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the animation.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).**Possible Values:** linear | ease | ease-in | ease-out | ease-in-out
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapViewBase.html#goTo)
     */
    signal?: AbortSignal;
  }

  export interface MapViewBaseGoToTarget extends Object {
    /**
     * The target of the animation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapViewBase.html#goTo)
     */
    target?:
      | number[]
      | Geometry
      | Geometry[]
      | Collection<Geometry>
      | Graphic
      | Graphic[]
      | Collection<Graphic>
      | Viewpoint;
    /**
     * The [MapView.center](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapViewBase.html#center) to go to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapViewBase.html#goTo)
     */
    center?: number[];
    /**
     * The [MapView.scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapViewBase.html#scale) to go to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapViewBase.html#goTo)
     */
    scale?: number;
    /**
     * The [MapView.zoom](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapViewBase.html#zoom) to go to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapViewBase.html#goTo)
     */
    zoom?: number;
  }

  export interface MapViewDragEventOrigin extends Object {
    x: number;

    y: number;
  }

  export interface HitTestResultResults extends Object {
    /**
     * A graphic representing a feature in the view that intersects the inputscreen coordinates. If the graphic comes from a layer with an applied [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html),then the [symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#symbol) property will be empty. Other properties may be emptybased on the context in which the graphic is fetched.If the result comes from a [VectorTileLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html) then a static graphic is returned with two `attributes`:`layerId` and `layerName`. These correspond to the name and id of the style-layer in the[vector tile style](https://developers.arcgis.com/rest/services-reference/vector-tile-style.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#HitTestResult)
     */
    graphic: Graphic;
    /**
     * The point geometry in the spatial reference of the viewcorresponding with the input screen coordinates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#HitTestResult)
     */
    mapPoint: Point;
  }

  interface gamepadGamepadSettings extends Accessor {
    /**
     * Use this property to explicitly select the gamepad device for map and scene navigation.If unspecified then all connected gamepads will be able to navigate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-gamepad-GamepadSettings.html#device)
     *
     * @default null
     */
    device: GamepadInputDevice;
    /**
     * Whether gamepad navigation is enabled on the View.If this is enabled, but no `device` is specified, the first supported onewill be selected automatically.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-gamepad-GamepadSettings.html#enabled)
     *
     * @default true
     */
    enabled: boolean;
    /**
     * This setting controls the behavior of forward and back movement of the left stick. If set to `pan`, movement will be at a constantaltitude (panning the view forward and backward) whereas `zoom` will move the view in the viewing direction. Pan is best suited for exploringa scene as if on foot or in a car. Zoom mode provides great control to navigate the scene similar to a flight simulator.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-gamepad-GamepadSettings.html#mode)
     *
     * @default pan
     */
    mode: "pan" | "zoom";
    /**
     * Determines whether pressing the tilt axis forwards make the view tilt down (towards the nadir), or up (towards the zenith).The default behavior is to tilt the view down when pressing the stick that controls tilt forwards.**Possible Values:** forward-down | forward-up
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-gamepad-GamepadSettings.html#tiltDirection)
     *
     * @default forward-down
     */
    tiltDirection: "forward-down" | "forward-up";
  }

  interface gamepadGamepadSettingsConstructor {
    new (properties?: gamepadGamepadSettingsProperties): gamepadGamepadSettings;
  }

  export const gamepadGamepadSettings: gamepadGamepadSettingsConstructor;

  interface gamepadGamepadSettingsProperties {
    /**
     * Use this property to explicitly select the gamepad device for map and scene navigation.If unspecified then all connected gamepads will be able to navigate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-gamepad-GamepadSettings.html#device)
     *
     * @default null
     */
    device?: GamepadInputDeviceProperties;
    /**
     * Whether gamepad navigation is enabled on the View.If this is enabled, but no `device` is specified, the first supported onewill be selected automatically.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-gamepad-GamepadSettings.html#enabled)
     *
     * @default true
     */
    enabled?: boolean;
    /**
     * This setting controls the behavior of forward and back movement of the left stick. If set to `pan`, movement will be at a constantaltitude (panning the view forward and backward) whereas `zoom` will move the view in the viewing direction. Pan is best suited for exploringa scene as if on foot or in a car. Zoom mode provides great control to navigate the scene similar to a flight simulator.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-gamepad-GamepadSettings.html#mode)
     *
     * @default pan
     */
    mode?: "pan" | "zoom";
    /**
     * Determines whether pressing the tilt axis forwards make the view tilt down (towards the nadir), or up (towards the zenith).The default behavior is to tilt the view down when pressing the stick that controls tilt forwards.**Possible Values:** forward-down | forward-up
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-gamepad-GamepadSettings.html#tiltDirection)
     *
     * @default forward-down
     */
    tiltDirection?: "forward-down" | "forward-up";
  }

  interface Navigation extends Accessor {
    /**
     * Gamepad navigation specific configuration settings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-Navigation.html#gamepad)
     */
    readonly gamepad: gamepadGamepadSettings;
  }

  interface NavigationConstructor {
    new (properties?: NavigationProperties): Navigation;
  }

  export const Navigation: NavigationConstructor;

  interface NavigationProperties {}

  interface SceneView extends View, BreakpointsOwner {
    /**
     * Allows the view to be partially or fully transparent when compositedwith the webpage elements behind it. This property can only be set onceat construction time. When alpha compositing is enabled, web scenes are less performant.It's important to set this property to `true` only when you need to apply transparency on the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#alphaCompositingEnabled)
     *
     * @default false
     */
    alphaCompositingEnabled: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#camera)
     */
    camera: Camera;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#center)
     */
    center: Point;
    /**
     * Represents an optional clipping area used to define thevisible [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of a local scene.If defined, only data (including the basemap) within the area will be displayed.The `clippingArea` property only applies to [local](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewingMode) scenes.![scene-clipping-area](https://developers.arcgis.com/javascript/assets/img/apiref/views/scene-clipping-area.png%20%22Local%20scene%20with%20clippingArea%22)The clippingArea property contains an internal reference which may bemodified in the future. To persist or modify the clippingArea,create a clone using [clippingArea.clone()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#clone).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#clippingArea)
     */
    clippingArea: Extent;
    /**
     * Specifies constraints for [Camera tilt](esri-Camera.html#tilt) and altitude that may be applied to the SceneView. See the object specification table below for details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    constraints: SceneViewConstraints;
    /**
     * Specifies various properties of the environment's visualization in the view.The SceneView will redraw automatically when any property of environment changes.```jsvar view = new SceneView({  map: map,  container: "viewDiv"});// Set the sun position to reflect the current timeview.environment.lighting.date = Date.now();// Disable automatic lighting updates by camera trackingview.environment.lighting.cameraTrackingEnabled = true;// Enable displaying shadows cast by the sunview.environment.lighting.directShadowsEnabled = true;// Set a background colorvar view = new SceneView({  container: "view",  map: map,  environment: {    background: {      type: "color",      color: [255, 252, 244, 1]    },    starsEnabled: false,    atmosphereEnabled: false  }});```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    environment: SceneViewEnvironment;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#extent)
     *
     * @default null
     */
    extent: Extent;
    /**
     * The view for the ground of the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#groundView)
     */
    readonly groundView: GroundView;
    /**
     * Options for configuring the highlight. Use the highlight method on theappropriate [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) to highlight a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     */
    highlightOptions: SceneViewHighlightOptions;
    /**
     * SceneView can draw scenes in three different quality modes: `high`, `medium` and `low`.The `low` quality profile significantly increases performance on slower browsers and devices by reducing thememory limit and the visual quality in the following aspects:  * Map resolution  * Scene layer detail level  * Anti-aliasing (edge smoothing)The high and medium quality profiles only differ in the maximum amount of memory which the view is allowed to use.A higher memory limit improves quality in complex web scenes with many layers, but can have a negative impact ondrawing performance and stability.The default value is based on the detected browser:  * `low` for Internet Explorer 11 and certain mobile devices  * `medium` for any other browserOverriding the default value is best done in the constructor (see example below). If the value is modifiedafter construction, only a subset of the quality aspects are affected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#qualityProfile)
     */
    qualityProfile: string;
    /**
     * Represents an approximation of the map scale at the center of the view.Setting the scale immediately changes the current view. For animatingthe view, see [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo).When set in the constructor, this property overrides the[zoom](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#zoom) property. Thisproperty will be ignored if the [viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewpoint),[camera](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#camera), or [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#extent) properties are also set in the constructor.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#scale)
     */
    scale: number;
    /**
     * The viewing mode (`local` or `global`). Global scenes render the earth as a sphere.Local scenes render the earth on a flat plane and allow for navigation and featuredisplay in a localized or [clipped](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#clippingArea) area. Users may also navigatethe camera of a local scene below the surface of a basemap.Value | Example | Description------|-------|------------global | ![scene-global](https://developers.arcgis.com/javascript/assets/img/apiref/views/scene-global.png) | Global scenes allow the entire globe to render in the view, showing the curvature of the earth.local | ![scene-local](https://developers.arcgis.com/javascript/assets/img/apiref/views/scene-local.png) | Local scenes render the earth on a flat surface. They can be constrained to only show a "local" area by setting the [clippingArea](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#clipplingArea) property. Local scenes also allow for displaying and exploring data that would otherwise be hidden by the surface of the earth.Depending on the viewing mode different [supported coordinate systems](esri-views-SceneView.html#supported-coordinate-systems) are available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewingMode)
     *
     * @default global
     */
    viewingMode: string;
    /**
     * Represents the current view as a [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html)or point of observation on the view. In SceneViews, [camera](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#camera)should be used in favor of viewpoint for watching or changing the point of view.Setting the viewpoint immediately changes the current view. For animatingthe view, see [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo).When set in the constructor, this property overrides the [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#extent),[center](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#center), [scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#scale), and [zoom](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#zoom) properties.This property will be ignored if [camera](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#camera) is also set in the constructor.The viewpoint property contains an internal reference which may bemodified in the future. To persist or modify the viewpoint,create a clone using [viewpoint.clone()](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html#clone).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewpoint)
     */
    viewpoint: Viewpoint;
    /**
     * Represents the level of detail (LOD) at the center of the view.Setting the zoom immediately changes the current view. For animatingthe view, see [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo).Setting this property in conjunction with [center](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#center) is a convenient wayto set the initial extent of the view.If set in the constructor, thisproperty will be ignored if the [viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewpoint),[camera](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#camera), [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#extent), or [scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#scale) propertiesare also set in the constructor.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#zoom)
     */
    zoom: number;

    /**
     * Sets the focus on the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#focus)
     *
     *
     */
    focus(): void;
    /**
     * Sets the view to a given target. The target parameter can be one of the following:* `[longitude, latitude]` pair of coordinates* [Geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html) (or array of [Geometry[]](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html))* [Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) (or array of [Graphic[]](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html))* [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html)* [Camera](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html)* Object with a combination of `target`, `center`, `scale`, `position`, `heading` and `tilt`  properties (with `target` being any of the types listed above). The `center` property  is provided as a convenience to animate the [SceneView.center](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#center)  and is the equivalent of specifying the `target` with the center [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html).  The target must be provided in the spatial reference of the view.This function returns a promise which resolves as soon as the new view has been set to the target.If the transition is animated, then the ongoing animation can be obtained using[SceneView.animation](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#animation).If the given target is far away from the current camera position, then heading and tilt will be automatically set to theirneutral values (facing north, looking top down).Tilt and heading can always be explicitly set to override this behavior.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo)
     *
     * @param target The target location/viewpoint to go to. When using an object for `target`, use the propertiesin the table below.
     * @param target.target The target of the animation.
     * @param target.center The [SceneView.center](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#center) to go to.
     * @param target.scale The [SceneView.scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#scale) to go to.
     * @param target.zoom The final [zoom](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#zoom) value to go to.
     * @param target.heading The [Camera.heading](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#heading) to go to.
     * @param target.tilt The [Camera.tilt](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#position) to go to.
     * @param target.position The [Camera.position](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#position) to go to.
     * @param options View transition options.
     * @param options.animate Indicates if the transition to the new view should be animated. If set to false, `speedFactor`, `duration`, `maxDuration`, and `easing` properties are ignored.
     * @param options.speedFactor Increases or decreases the animation speed by the specified factor. A speedFactor  of 2 will make the animation twice as fast, while a speedFactor of 0.5 will make the animation half as fast. Setting  the speed factor will automatically adapt the default maxDuration accordingly.
     * @param options.duration Set the exact duration (in milliseconds) of the animation. Note that by default, animation  duration is calculated based on the time required to reach the target at a constant speed. Setting duration  overrides the speedFactor option. Note that the resulting duration is still limited to the maxDuration.
     * @param options.maxDuration The maximum allowed duration (in milliseconds) of the animation. The  default maxDuration value takes the specified speedFactor into account.
     * @param options.easing The easing function to use for  the animation. This may either be a preset (named) function, or a user specified function. Supported named presets are:    `linear`,    `in-cubic`, `out-cubic`, `in-out-cubic`,    `in-expo`, `out-expo`, `in-out-expo`, `in-out-coast-quadratic`.  See [easing functions](https://easings.net/) for graphical representations of these functions.By default, animations that are less than 1000 ms use the `out-expo` easing function; longer animations use the `in-out-coast-quadratic` easing function.
     * @param options.signal An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the animation.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     */
    goTo(
      target:
        | number[]
        | Geometry
        | Geometry[]
        | Collection<Geometry>
        | Graphic
        | Graphic[]
        | Collection<Graphic>
        | Viewpoint
        | Camera
        | SceneViewGoToTarget,
      options?: SceneViewGoToOptions
    ): IPromise<any>;
    /**
     * Returns graphics that intersect the specified screen coordinate. The following layer typeswill return a result if a hit is made on an intersecting feature:[GraphicsLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html), [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html), [SceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html),[BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html), [PointCloudLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html), [CSVLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html),[StreamLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html), [GeoJSONLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html) and [SceneView.graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#graphics).If no options are specified, graphics that are behind the ground surface will not be returned unless the ground surface issemi-transparent. Otherwise, using the [map.ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#ground) in the include and exclude options determineswhether the ground surface prevents hit testing graphics that are under it.Starting with version 4.11, if a label intersects the specified screen coordinates then the result of the hitTest willcontain the graphic associated with that label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#hitTest)
     *
     * @param screenPoint The screen coordinates (or native mouse event) of the click on the view.
     * @param options Intersection test options. By default the [map.ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#ground) is excluded if its opacity  is smaller than one.
     * @param options.include A list of layers and graphics to include for intersection testing. All layers and graphics will be included if  include is not specified.
     * @param options.exclude A list of layers and graphics to include for intersection testing. No layers or graphics will be excluded if  exclude is not specified.
     *
     */
    hitTest(
      screenPoint: SceneViewScreenPoint | MouseEvent,
      options?: SceneViewHitTestOptions
    ): IPromise<SceneViewHitTestResult>;
    /**
     * Registers an event handler on the instance. Call this method to hook anevent with a listener. See the [Events summary table](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#events-summary) for a listof listened events.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#on)
     *
     * @param type The name of the event or events to listen for.
     * @param modifiersOrHandler Additional modifier keys to filter events.Please see [Key Values](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)for possible values. All the standard key values are supported.Alternatively, if no modifiers are required, the function will call when the event fires.The following events don't support modifier keys: `blur`, `focus`, `layerview-create`, `layerview-destroy`,`resize`.
     * @param handler The function to call when the event is fired, if modifiers were specified.
     *
     */
    on(type: string | string[], modifiersOrHandler: string[] | EventHandler, handler?: EventHandler): IHandle;
    /**
     * Create a screenshot of the current view. Screenshots include only elementsthat are rendered on the canvas (all geographical elements), but excludes overlayedDOM elements (UI, popups, etc.). By default, a screenshot of the whole viewis created. Different options allow for creating different types of screenshots,including taking screenshots at different aspect ratios, different resolutionsand creating thumbnails.Screenshots are always taken inside the padded area of the view (see[padding](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#padding)).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#takeScreenshot)
     *
     * @param options Screenshot options.
     * @param options.format The format of the resulting encoded data url.**Possible values**: jpg | png.
     * @param options.quality The quality (0 to 100) of the encoded image when encoding  as `jpg`.
     * @param options.width The width of the screenshot (defaults to the area width). The  height will be derived automatically if left unspecified, according to the aspect ratio of the  of the screenshot area.
     * @param options.height The height of the screenshot (defaults to the area height). The  width will be derived automatically if left unspecified, according to the aspect ratio of the  screenshot area.
     * @param options.area Specifies whether to take a screenshot of a specific  area of the view. The area coordinates are relative to the origin of the padded view (see  [padding](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#padding)) and will be clipped to the  view size. Defaults to the whole view (padding excluded).
     * @param options.ignorePadding Indicates whether view padding should be ignored.  Set this property to `true` to allow padded areas to be included in the screenshot.
     *
     */
    takeScreenshot(options?: SceneViewTakeScreenshotOptions): IPromise<SceneViewScreenshot>;
    /**
     * Converts the given screen point to a [map point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#toMap)
     *
     * @param screenPoint The location on the screen (or native mouse event) to convert.
     * @param options Intersection test options. By default only the [map.ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#ground) and any  [IntegratedMeshLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html) are included.
     * @param options.include A list of layers and graphics to include for intersection testing. All layers and graphics will be included if  include is not specified.
     * @param options.exclude A list of layers and graphics to include for intersection testing. No layers or graphics will be excluded if  exclude is not specified.
     *
     */
    toMap(screenPoint: SceneViewScreenPoint | MouseEvent, options?: SceneViewToMapOptions): Point;
    /**
     * Converts the given [map point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) to ascreen point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#toScreen)
     *
     * @param point A point geometry.
     *
     */
    toScreen(point: Point): SceneViewScreenPoint;

    on(name: "resize", eventHandler: SceneViewResizeEventHandler): IHandle;

    on(name: "resize", modifiers: string[], eventHandler: SceneViewResizeEventHandler): IHandle;

    on(name: "layerview-create", eventHandler: SceneViewLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create", modifiers: string[], eventHandler: SceneViewLayerviewCreateEventHandler): IHandle;

    on(name: "layerview-create-error", eventHandler: SceneViewLayerviewCreateErrorEventHandler): IHandle;

    on(
      name: "layerview-create-error",
      modifiers: string[],
      eventHandler: SceneViewLayerviewCreateErrorEventHandler
    ): IHandle;

    on(name: "layerview-destroy", eventHandler: SceneViewLayerviewDestroyEventHandler): IHandle;

    on(name: "layerview-destroy", modifiers: string[], eventHandler: SceneViewLayerviewDestroyEventHandler): IHandle;

    on(name: "click", eventHandler: SceneViewClickEventHandler): IHandle;

    on(name: "click", modifiers: string[], eventHandler: SceneViewClickEventHandler): IHandle;

    on(name: "double-click", eventHandler: SceneViewDoubleClickEventHandler): IHandle;

    on(name: "double-click", modifiers: string[], eventHandler: SceneViewDoubleClickEventHandler): IHandle;

    on(name: "immediate-click", eventHandler: SceneViewImmediateClickEventHandler): IHandle;

    on(name: "immediate-click", modifiers: string[], eventHandler: SceneViewImmediateClickEventHandler): IHandle;

    on(name: "hold", eventHandler: SceneViewHoldEventHandler): IHandle;

    on(name: "hold", modifiers: string[], eventHandler: SceneViewHoldEventHandler): IHandle;

    on(name: "drag", eventHandler: SceneViewDragEventHandler): IHandle;

    on(name: "drag", modifiers: string[], eventHandler: SceneViewDragEventHandler): IHandle;

    on(name: "mouse-wheel", eventHandler: SceneViewMouseWheelEventHandler): IHandle;

    on(name: "mouse-wheel", modifiers: string[], eventHandler: SceneViewMouseWheelEventHandler): IHandle;

    on(name: "key-down", eventHandler: SceneViewKeyDownEventHandler): IHandle;

    on(name: "key-down", modifiers: string[], eventHandler: SceneViewKeyDownEventHandler): IHandle;

    on(name: "key-up", eventHandler: SceneViewKeyUpEventHandler): IHandle;

    on(name: "key-up", modifiers: string[], eventHandler: SceneViewKeyUpEventHandler): IHandle;

    on(name: "pointer-down", eventHandler: SceneViewPointerDownEventHandler): IHandle;

    on(name: "pointer-down", modifiers: string[], eventHandler: SceneViewPointerDownEventHandler): IHandle;

    on(name: "pointer-move", eventHandler: SceneViewPointerMoveEventHandler): IHandle;

    on(name: "pointer-move", modifiers: string[], eventHandler: SceneViewPointerMoveEventHandler): IHandle;

    on(name: "pointer-up", eventHandler: SceneViewPointerUpEventHandler): IHandle;

    on(name: "pointer-up", modifiers: string[], eventHandler: SceneViewPointerUpEventHandler): IHandle;

    on(name: "pointer-enter", eventHandler: SceneViewPointerEnterEventHandler): IHandle;

    on(name: "pointer-enter", modifiers: string[], eventHandler: SceneViewPointerEnterEventHandler): IHandle;

    on(name: "pointer-leave", eventHandler: SceneViewPointerLeaveEventHandler): IHandle;

    on(name: "pointer-leave", modifiers: string[], eventHandler: SceneViewPointerLeaveEventHandler): IHandle;

    on(name: "focus", eventHandler: SceneViewFocusEventHandler): IHandle;

    on(name: "focus", modifiers: string[], eventHandler: SceneViewFocusEventHandler): IHandle;

    on(name: "blur", eventHandler: SceneViewBlurEventHandler): IHandle;

    on(name: "blur", modifiers: string[], eventHandler: SceneViewBlurEventHandler): IHandle;
  }

  interface SceneViewConstructor {
    new (properties?: SceneViewProperties): SceneView;
  }

  export const SceneView: SceneViewConstructor;

  interface SceneViewProperties extends ViewProperties, BreakpointsOwnerProperties {
    /**
     * Allows the view to be partially or fully transparent when compositedwith the webpage elements behind it. This property can only be set onceat construction time. When alpha compositing is enabled, web scenes are less performant.It's important to set this property to `true` only when you need to apply transparency on the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#alphaCompositingEnabled)
     *
     * @default false
     */
    alphaCompositingEnabled?: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#camera)
     */
    camera?: CameraProperties;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#center)
     */
    center?: PointProperties | number[];
    /**
     * Represents an optional clipping area used to define thevisible [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of a local scene.If defined, only data (including the basemap) within the area will be displayed.The `clippingArea` property only applies to [local](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewingMode) scenes.![scene-clipping-area](https://developers.arcgis.com/javascript/assets/img/apiref/views/scene-clipping-area.png%20%22Local%20scene%20with%20clippingArea%22)The clippingArea property contains an internal reference which may bemodified in the future. To persist or modify the clippingArea,create a clone using [clippingArea.clone()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#clone).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#clippingArea)
     */
    clippingArea?: ExtentProperties;
    /**
     * Specifies constraints for [Camera tilt](esri-Camera.html#tilt) and altitude that may be applied to the SceneView. See the object specification table below for details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    constraints?: SceneViewConstraintsProperties;
    /**
     * Specifies various properties of the environment's visualization in the view.The SceneView will redraw automatically when any property of environment changes.```jsvar view = new SceneView({  map: map,  container: "viewDiv"});// Set the sun position to reflect the current timeview.environment.lighting.date = Date.now();// Disable automatic lighting updates by camera trackingview.environment.lighting.cameraTrackingEnabled = true;// Enable displaying shadows cast by the sunview.environment.lighting.directShadowsEnabled = true;// Set a background colorvar view = new SceneView({  container: "view",  map: map,  environment: {    background: {      type: "color",      color: [255, 252, 244, 1]    },    starsEnabled: false,    atmosphereEnabled: false  }});```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    environment?: SceneViewEnvironmentProperties;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#extent)
     *
     * @default null
     */
    extent?: ExtentProperties;
    /**
     * Options for configuring the highlight. Use the highlight method on theappropriate [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) to highlight a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     */
    highlightOptions?: SceneViewHighlightOptionsProperties;
    /**
     * SceneView can draw scenes in three different quality modes: `high`, `medium` and `low`.The `low` quality profile significantly increases performance on slower browsers and devices by reducing thememory limit and the visual quality in the following aspects:  * Map resolution  * Scene layer detail level  * Anti-aliasing (edge smoothing)The high and medium quality profiles only differ in the maximum amount of memory which the view is allowed to use.A higher memory limit improves quality in complex web scenes with many layers, but can have a negative impact ondrawing performance and stability.The default value is based on the detected browser:  * `low` for Internet Explorer 11 and certain mobile devices  * `medium` for any other browserOverriding the default value is best done in the constructor (see example below). If the value is modifiedafter construction, only a subset of the quality aspects are affected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#qualityProfile)
     */
    qualityProfile?: string;
    /**
     * Represents an approximation of the map scale at the center of the view.Setting the scale immediately changes the current view. For animatingthe view, see [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo).When set in the constructor, this property overrides the[zoom](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#zoom) property. Thisproperty will be ignored if the [viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewpoint),[camera](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#camera), or [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#extent) properties are also set in the constructor.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#scale)
     */
    scale?: number;
    /**
     * The viewing mode (`local` or `global`). Global scenes render the earth as a sphere.Local scenes render the earth on a flat plane and allow for navigation and featuredisplay in a localized or [clipped](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#clippingArea) area. Users may also navigatethe camera of a local scene below the surface of a basemap.Value | Example | Description------|-------|------------global | ![scene-global](https://developers.arcgis.com/javascript/assets/img/apiref/views/scene-global.png) | Global scenes allow the entire globe to render in the view, showing the curvature of the earth.local | ![scene-local](https://developers.arcgis.com/javascript/assets/img/apiref/views/scene-local.png) | Local scenes render the earth on a flat surface. They can be constrained to only show a "local" area by setting the [clippingArea](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#clipplingArea) property. Local scenes also allow for displaying and exploring data that would otherwise be hidden by the surface of the earth.Depending on the viewing mode different [supported coordinate systems](esri-views-SceneView.html#supported-coordinate-systems) are available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewingMode)
     *
     * @default global
     */
    viewingMode?: string;
    /**
     * Represents the current view as a [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html)or point of observation on the view. In SceneViews, [camera](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#camera)should be used in favor of viewpoint for watching or changing the point of view.Setting the viewpoint immediately changes the current view. For animatingthe view, see [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo).When set in the constructor, this property overrides the [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#extent),[center](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#center), [scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#scale), and [zoom](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#zoom) properties.This property will be ignored if [camera](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#camera) is also set in the constructor.The viewpoint property contains an internal reference which may bemodified in the future. To persist or modify the viewpoint,create a clone using [viewpoint.clone()](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html#clone).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewpoint)
     */
    viewpoint?: ViewpointProperties;
    /**
     * Represents the level of detail (LOD) at the center of the view.Setting the zoom immediately changes the current view. For animatingthe view, see [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo).Setting this property in conjunction with [center](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#center) is a convenient wayto set the initial extent of the view.If set in the constructor, thisproperty will be ignored if the [viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewpoint),[camera](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#camera), [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#extent), or [scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#scale) propertiesare also set in the constructor.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#zoom)
     */
    zoom?: number;
  }

  export interface SceneViewBlurEvent {
    native: any;

    target: View;
  }

  export interface SceneViewClickEvent {
    button: number;

    buttons: number;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface SceneViewDoubleClickEvent {
    button: number;

    buttons: number;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface SceneViewDragEvent {
    action: string;

    angle: number;

    button: number;

    buttons: number;

    native: any;

    origin: SceneViewDragEventOrigin;

    radius: number;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export type EasingFunction = (t: number, duration: number) => number;

  export interface SceneViewFocusEvent {
    native: any;

    target: View;
  }

  /**
   * Object specification for the result of the [hitTest()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#hitTest) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#HitTestResult)
   */
  export interface SceneViewHitTestResult extends Object {
    /**
     * An array of result objects returned from the [hitTest()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#hitTest).  Results are returned when the location of the input screen coordinates intersect a  [Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) in the view. See the table below for the specification of each  object in this array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#HitTestResult)
     */
    results: SceneViewHitTestResultResults[];
    /**
     * Ground intersection result. The ground hit result will always be returned, even if the ground was excluded from the [hitTest](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#hitTest).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#HitTestResult)
     */
    ground: HitTestResultGround;
    /**
     * The screen coordinates (or native mouse event) of the click on the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#HitTestResult)
     */
    screenPoint: SceneViewScreenPoint | MouseEvent;
  }

  export interface SceneViewHoldEvent {
    button: number;

    buttons: number;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface SceneViewImmediateClickEvent {
    button: number;

    buttons: number;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  /**
   * A layer or graphic to be used in [toMap](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#toMap) and [hitTest](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#hitTest) filter options.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#IntersectItem)
   */
  export type IntersectItem = Graphic | Layer | BuildingSublayer;

  export interface SceneViewKeyDownEvent {
    key: string;

    native: any;

    repeat: boolean;

    stopPropagation: Function;

    timestamp: number;

    type: string;
  }

  export interface SceneViewKeyUpEvent {
    key: string;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: string;
  }

  export interface SceneViewLayerviewCreateErrorEvent {
    error: Error;

    layer: Layer;
  }

  export interface SceneViewLayerviewCreateEvent {
    layer: Layer;

    layerView: LayerView;
  }

  export interface SceneViewLayerviewDestroyEvent {
    layer: Layer;

    layerView: LayerView;
  }

  export interface SceneViewMouseWheelEvent {
    deltaY: number;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface SceneViewPointerDownEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: string;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface SceneViewPointerEnterEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: string;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface SceneViewPointerLeaveEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: string;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface SceneViewPointerMoveEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: string;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface SceneViewPointerUpEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: string;

    stopPropagation: Function;

    timestamp: number;

    type: string;

    x: number;

    y: number;
  }

  export interface SceneViewResizeEvent {
    height: number;

    oldHeight: number;

    oldWidth: number;

    width: number;
  }

  export interface SceneViewConstraintsProperties extends Object {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    altitude?: SceneViewConstraintsAltitudeProperties;
    /**
     * Specifies the near and far webgl clip distances.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    clipDistance?: SceneViewConstraintsClipDistanceProperties;
    /**
     * When enabled, prevents the user from navigating below the          surface in a local SceneView. This property is deprecated, please use [Ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#navigationConstraint) instead.**Deprecated since version 4.8**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    collision?: SceneViewConstraintsCollision;
    /**
     * Specifies a constraint on the amount of allowed tilting of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    tilt?: SceneViewConstraintsTiltProperties;
  }

  export interface SceneViewConstraints extends AnonymousAccessor {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    altitude?: SceneViewConstraintsAltitude;
    /**
     * Specifies the near and far webgl clip distances.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    clipDistance?: SceneViewConstraintsClipDistance;
    /**
     * When enabled, prevents the user from navigating below the          surface in a local SceneView. This property is deprecated, please use [Ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#navigationConstraint) instead.**Deprecated since version 4.8**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    collision?: SceneViewConstraintsCollision;
    /**
     * Specifies a constraint on the amount of allowed tilting of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    tilt?: SceneViewConstraintsTilt;
  }

  export interface SceneViewConstraintsAltitudeProperties extends Object {
    /**
     * The minimum allowed camera altitude (in meters).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     *
     * @default -∞
     */
    min?: number;
    /**
     * The maximum allowed camera altitude (in meters).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     *
     * @default EARTH_RADIUS * 4
     */
    max?: number;
  }

  export interface SceneViewConstraintsAltitude extends AnonymousAccessor {
    /**
     * The minimum allowed camera altitude (in meters).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     *
     * @default -∞
     */
    min?: number;
    /**
     * The maximum allowed camera altitude (in meters).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     *
     * @default EARTH_RADIUS * 4
     */
    max?: number;
  }

  export interface SceneViewConstraintsClipDistanceProperties extends Object {
    /**
     * The near clip distance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    near?: number;
    /**
     * The far clip distance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    far?: number;
    /**
     * Specifies the mode of the constraint which is                                     either `auto` or `manual`. In `auto` mode,                                     the near and far clip distance values are                                     automatically determined. In `manual` mode,                                     the near and far clip distance values are user                                     defined, constant values. Note that the mode                                     automatically changes to `manual` whenever                                     the `near` or `far` property is set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     *
     * @default auto
     */
    mode?: string;
  }

  export interface SceneViewConstraintsClipDistance extends AnonymousAccessor {
    /**
     * The near clip distance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    near?: number;
    /**
     * The far clip distance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    far?: number;
    /**
     * Specifies the mode of the constraint which is                                     either `auto` or `manual`. In `auto` mode,                                     the near and far clip distance values are                                     automatically determined. In `manual` mode,                                     the near and far clip distance values are user                                     defined, constant values. Note that the mode                                     automatically changes to `manual` whenever                                     the `near` or `far` property is set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     *
     * @default auto
     */
    mode?: string;
  }

  export interface SceneViewConstraintsCollision extends Object {
    /**
     * Set to `false` to permit the user to navigate below          the surface in a local SceneView.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     *
     * @default true
     */
    enabled?: boolean;
  }

  export interface SceneViewConstraintsTiltProperties extends Object {
    /**
     * Specifies the maximum amount of tilt (in degrees)                            allowed in the view and may range from 0.5 to                            179.5 degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    max?: number;
    /**
     * Specifies the mode of the constraint. There are two possible values:                              `auto` or `manual`. In `auto` mode,                             the maximum tilt value is automatically determined                             based on the altitude of the view camera. In                             `manual` mode, the maximum tilt value is a                             user defined, constant value. **Note:** The mode                             automatically changes to `manual` whenever                             the `max` property is set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     *
     * @default auto
     */
    mode?: string;
  }

  export interface SceneViewConstraintsTilt extends AnonymousAccessor {
    /**
     * Specifies the maximum amount of tilt (in degrees)                            allowed in the view and may range from 0.5 to                            179.5 degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    max?: number;
    /**
     * Specifies the mode of the constraint. There are two possible values:                              `auto` or `manual`. In `auto` mode,                             the maximum tilt value is automatically determined                             based on the altitude of the view camera. In                             `manual` mode, the maximum tilt value is a                             user defined, constant value. **Note:** The mode                             automatically changes to `manual` whenever                             the `max` property is set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     *
     * @default auto
     */
    mode?: string;
  }

  export interface SceneViewEnvironmentProperties extends Object {
    /**
     * Specifies how the background of the scene           (which lies behind sky, stars and atmosphere) should be displayed.           By default this is simply a single, fully opaque, black color. Currently           [ColorBackground](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-background-ColorBackground.html) is the only type of background supported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    background?: BackgroundProperties;
    /**
     * Lighting conditions of the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    lighting?: SceneViewEnvironmentLightingProperties;
    /**
     * Indicates whether atmosphere visualization is enabled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    atmosphereEnabled?: boolean;
    /**
     * Atmosphere conditions of the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    atmosphere?: SceneViewEnvironmentAtmosphereProperties;
    /**
     * Indicates whether stars visualization is enabled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     *
     * @default true
     */
    starsEnabled?: boolean;
  }

  export interface SceneViewEnvironment extends AnonymousAccessor {
    /**
     * Specifies how the background of the scene           (which lies behind sky, stars and atmosphere) should be displayed.           By default this is simply a single, fully opaque, black color. Currently           [ColorBackground](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-background-ColorBackground.html) is the only type of background supported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    background?: Background;
    /**
     * Lighting conditions of the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    lighting?: SceneViewEnvironmentLighting;
    /**
     * Indicates whether atmosphere visualization is enabled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    atmosphereEnabled?: boolean;
    /**
     * Atmosphere conditions of the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    atmosphere?: SceneViewEnvironmentAtmosphere;
    /**
     * Indicates whether stars visualization is enabled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     *
     * @default true
     */
    starsEnabled?: boolean;
  }

  export interface SceneViewEnvironmentAtmosphereProperties extends Object {
    /**
     * Indicates the quality of the atmosphere visualization.          The quality of the atmosphere may have a significant impact on performance.          This setting does not have any effect in [local scenes](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewingMode).  Known Value | Example  ------------|---------  low | ![scene-atmosphere](https://developers.arcgis.com/javascript/assets/img/apiref/views/scene-atmosphere.png)  high | ![scene-atmosphere](https://developers.arcgis.com/javascript/assets/img/apiref/views/scene-atmosphere-realistic.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     *
     * @default low
     */
    quality?: string;
  }

  export interface SceneViewEnvironmentAtmosphere extends AnonymousAccessor {
    /**
     * Indicates the quality of the atmosphere visualization.          The quality of the atmosphere may have a significant impact on performance.          This setting does not have any effect in [local scenes](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewingMode).  Known Value | Example  ------------|---------  low | ![scene-atmosphere](https://developers.arcgis.com/javascript/assets/img/apiref/views/scene-atmosphere.png)  high | ![scene-atmosphere](https://developers.arcgis.com/javascript/assets/img/apiref/views/scene-atmosphere-realistic.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     *
     * @default low
     */
    quality?: string;
  }

  export interface SceneViewEnvironmentLightingProperties extends Object {
    /**
     * The current date and time of the simulated sun.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     *
     * @default new Date("March 15, 2015 12:00:00")
     */
    date?: DateProperties;
    /**
     * Indicates whether to show shadows cast by the sun. Shadows           are only displayed for real world 3D objects. Terrain doesn't cast shadows. In local scenes at small zoom levels,           shadows are not displayed. For more control on which 3D objects cast shadows use the `castShadows` property           available on [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#castShadows),           [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#castShadows),           [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#castShadows),           and [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#castShadows).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     *
     * @default false
     */
    directShadowsEnabled?: boolean;
    /**
     * Indicates whether to show ambient occlusion shading.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     *
     * @default false
     */
    ambientOcclusionEnabled?: boolean;
    /**
     * Indicates whether the date and time of the simulated   sun is automatically updated to maintain the current time of day while the camera changes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     *
     * @default true
     */
    cameraTrackingEnabled?: boolean;
  }

  export interface SceneViewEnvironmentLighting extends AnonymousAccessor {
    /**
     * The current date and time of the simulated sun.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     *
     * @default new Date("March 15, 2015 12:00:00")
     */
    date?: Date;
    /**
     * Indicates whether to show shadows cast by the sun. Shadows           are only displayed for real world 3D objects. Terrain doesn't cast shadows. In local scenes at small zoom levels,           shadows are not displayed. For more control on which 3D objects cast shadows use the `castShadows` property           available on [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#castShadows),           [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#castShadows),           [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#castShadows),           and [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#castShadows).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     *
     * @default false
     */
    directShadowsEnabled?: boolean;
    /**
     * Indicates whether to show ambient occlusion shading.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     *
     * @default false
     */
    ambientOcclusionEnabled?: boolean;
    /**
     * Indicates whether the date and time of the simulated   sun is automatically updated to maintain the current time of day while the camera changes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     *
     * @default true
     */
    cameraTrackingEnabled?: boolean;
  }

  export interface SceneViewGoToOptions extends Object {
    /**
     * Indicates if the transition to the new view should be animated. If set to false, `speedFactor`, `duration`, `maxDuration`, and `easing` properties are ignored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo)
     *
     * @default true
     */
    animate?: boolean;
    /**
     * Increases or decreases the animation speed by the specified factor. A speedFactor  of 2 will make the animation twice as fast, while a speedFactor of 0.5 will make the animation half as fast. Setting  the speed factor will automatically adapt the default maxDuration accordingly.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo)
     *
     * @default 1
     */
    speedFactor?: number;
    /**
     * Set the exact duration (in milliseconds) of the animation. Note that by default, animation  duration is calculated based on the time required to reach the target at a constant speed. Setting duration  overrides the speedFactor option. Note that the resulting duration is still limited to the maxDuration.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo)
     */
    duration?: number;
    /**
     * The maximum allowed duration (in milliseconds) of the animation. The  default maxDuration value takes the specified speedFactor into account.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo)
     *
     * @default 8000
     */
    maxDuration?: number;
    /**
     * The easing function to use for  the animation. This may either be a preset (named) function, or a user specified function. Supported named presets are:    `linear`,    `in-cubic`, `out-cubic`, `in-out-cubic`,    `in-expo`, `out-expo`, `in-out-expo`, `in-out-coast-quadratic`.  See [easing functions](https://easings.net/) for graphical representations of these functions.By default, animations that are less than 1000 ms use the `out-expo` easing function; longer animations use the `in-out-coast-quadratic` easing function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo)
     */
    easing?: string | EasingFunction;
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the animation.  If canceled, the promise will be rejected with an error named `AbortError`.  See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo)
     */
    signal?: AbortSignal;
  }

  export interface SceneViewGoToTarget extends Object {
    /**
     * The target of the animation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo)
     */
    target?:
      | number[]
      | Geometry
      | Geometry[]
      | Collection<Geometry>
      | Graphic
      | Graphic[]
      | Collection<Graphic>
      | Viewpoint
      | Camera;
    /**
     * The [SceneView.center](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#center) to go to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo)
     */
    center?: number[] | Point;
    /**
     * The [SceneView.scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#scale) to go to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo)
     */
    scale?: number;
    /**
     * The final [zoom](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#zoom) value to go to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo)
     */
    zoom?: number;
    /**
     * The [Camera.heading](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#heading) to go to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo)
     */
    heading?: number;
    /**
     * The [Camera.tilt](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#position) to go to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo)
     */
    tilt?: number;
    /**
     * The [Camera.position](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#position) to go to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo)
     */
    position?: Point;
  }

  export interface SceneViewHighlightOptionsProperties extends Object {
    /**
     * The color of the highlight.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     *
     * @default #00ffff
     */
    color?: Color | number[] | string;
    /**
     * The opacity of the highlight halo. This will be multiplied                               with the opacity specified in `color`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     *
     * @default 1
     */
    haloOpacity?: number;
    /**
     * The opacity of the fill (area within the halo). This will be                               multiplied with the opacity specified in `color`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     *
     * @default 0.25
     */
    fillOpacity?: number;
  }

  export interface SceneViewHighlightOptions extends AnonymousAccessor {
    /**
     * The color of the highlight.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     *
     * @default #00ffff
     */
    color?: Color;
    /**
     * The opacity of the highlight halo. This will be multiplied                               with the opacity specified in `color`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     *
     * @default 1
     */
    haloOpacity?: number;
    /**
     * The opacity of the fill (area within the halo). This will be                               multiplied with the opacity specified in `color`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     *
     * @default 0.25
     */
    fillOpacity?: number;
  }

  export interface SceneViewHitTestOptions extends Object {
    /**
     * A list of layers and graphics to include for intersection testing. All layers and graphics will be included if  include is not specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#hitTest)
     */
    include?:
      | (IntersectItem | Collection<IntersectItem> | IntersectItem[] | Ground)[]
      | Collection<IntersectItem>
      | IntersectItem;
    /**
     * A list of layers and graphics to include for intersection testing. No layers or graphics will be excluded if  exclude is not specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#hitTest)
     */
    exclude?:
      | (IntersectItem | Collection<IntersectItem> | IntersectItem[] | Ground)[]
      | Collection<IntersectItem>
      | IntersectItem;
  }

  export interface SceneViewTakeScreenshotOptions extends Object {
    /**
     * The format of the resulting encoded data url.**Possible values**: jpg | png.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#takeScreenshot)
     *
     * @default jpg
     */
    format?: string;
    /**
     * The quality (0 to 100) of the encoded image when encoding  as `jpg`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#takeScreenshot)
     *
     * @default 98
     */
    quality?: number;
    /**
     * The width of the screenshot (defaults to the area width). The  height will be derived automatically if left unspecified, according to the aspect ratio of the  of the screenshot area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#takeScreenshot)
     */
    width?: number;
    /**
     * The height of the screenshot (defaults to the area height). The  width will be derived automatically if left unspecified, according to the aspect ratio of the  screenshot area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#takeScreenshot)
     */
    height?: number;
    /**
     * Specifies whether to take a screenshot of a specific  area of the view. The area coordinates are relative to the origin of the padded view (see  [padding](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#padding)) and will be clipped to the  view size. Defaults to the whole view (padding excluded).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#takeScreenshot)
     */
    area?: SceneViewTakeScreenshotOptionsArea;
    /**
     * Indicates whether view padding should be ignored.  Set this property to `true` to allow padded areas to be included in the screenshot.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#takeScreenshot)
     */
    ignorePadding?: boolean;
  }

  export interface SceneViewTakeScreenshotOptionsArea extends Object {
    /**
     * The x coordinate of the area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#takeScreenshot)
     */
    x?: number;
    /**
     * The y coordinate of the area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#takeScreenshot)
     */
    y?: number;
    /**
     * The width of the area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#takeScreenshot)
     */
    width?: number;
    /**
     * The height of the area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#takeScreenshot)
     */
    height?: number;
  }

  export interface SceneViewToMapOptions extends Object {
    /**
     * A list of layers and graphics to include for intersection testing. All layers and graphics will be included if  include is not specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#toMap)
     */
    include?:
      | (IntersectItem | Collection<IntersectItem> | IntersectItem[] | Ground)[]
      | Collection<IntersectItem>
      | IntersectItem;
    /**
     * A list of layers and graphics to include for intersection testing. No layers or graphics will be excluded if  exclude is not specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#toMap)
     */
    exclude?:
      | (IntersectItem | Collection<IntersectItem> | IntersectItem[] | Ground)[]
      | Collection<IntersectItem>
      | IntersectItem;
  }

  /**
   * An object representing a point on the screen.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#ScreenPoint)
   */
  export interface SceneViewScreenPoint extends Object {
    /**
     * The x coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#ScreenPoint)
     */
    x: number;
    /**
     * The y coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#ScreenPoint)
     */
    y: number;
  }

  /**
   * Object returned when [takeScreenshot()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#takeScreenshot) promise resolves:
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#Screenshot)
   */
  export interface SceneViewScreenshot extends Object {
    /**
     * A data url representing the screenshot.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#Screenshot)
     */
    dataUrl: string;
    /**
     * The raw RGBA image data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#Screenshot)
     */
    data: ImageData;
  }

  export interface SceneViewDragEventOrigin extends Object {
    x: number;

    y: number;
  }

  export interface HitTestResultGround extends Object {
    /**
     * The point at which the ground was hit while performing the  hitTest. This may be `null` when the ground was not hit at all (for example by clicking on the sky).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#HitTestResult)
     */
    mapPoint: Point;
    /**
     * The distance from camera position to the ground hit. The distance will be `0` if the ground was not hit at all. In global scenes the distance will be in meters while in local scenes the distance will be in the unit of the spatial reference of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#HitTestResult)
     */
    distance: number;
  }

  export interface SceneViewHitTestResultResults extends Object {
    /**
     * A graphic present in the view that intersects the input screen coordinates. Starting with version 4.11, if a label intersects the input screen coordinates the corresponding graphic is returned. If the graphic comes from a layer with an applied [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html), then the [symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#symbol) property will be empty. Other properties will be empty based on the context in which the graphic is fetched. Some layers do not have a [graphic.geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#geometry) (for example: [SceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html) and [PointCloudLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html) `PointCloudLayer`) The [graphic.attributes](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#attributes) only includes attributes which are loaded by the client, for this reason it can be a subset of all attributes. [FeatureLayer.outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#outFields) with `["*"]` can be used to force all attributes to be present. The [graphic.symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#symbol) exists only for graphics coming from [GraphicsLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html) or [view.graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#graphics) but it is possible to compute the displayed symbology with [getDisplayedSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#getDisplayedSymbol).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#HitTestResult)
     */
    graphic: Graphic;
    /**
     * The point geometry in the spatial reference of the view corresponding with the input screen coordinates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#HitTestResult)
     */
    mapPoint: Point;
    /**
     * The distance from the camera position to the point geometry hit on this graphic. In global scenes the distance will be in meters while in local scenes the distance will be in the unit of the spatial reference of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#HitTestResult)
     */
    distance: number;
  }

  interface DefaultUI extends UI {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-DefaultUI.html#components)
     */
    components: string[];
  }

  interface DefaultUIConstructor {
    new (properties?: DefaultUIProperties): DefaultUI;
  }

  export const DefaultUI: DefaultUIConstructor;

  interface DefaultUIProperties extends UIProperties {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-DefaultUI.html#components)
     */
    components?: string[];
  }

  interface UI extends Accessor {
    /**
     * The HTML Element that contains the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#container)
     */
    container: HTMLElement;
    /**
     * The height of the UI container.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#height)
     */
    readonly height: number;
    /**
     * Defines the padding for the UI from the top, left, right, and bottom sidesof the container or [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html). If the value is a number,it will be used to pad all sides of the container.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#padding)
     *
     * @default { left: 15, top: 15, right: 15, bottom: 15 }
     */
    padding: any | number;
    /**
     * The view associated with the UI components.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#view)
     */
    view: MapView | SceneView;
    /**
     * The width of the UI container.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#width)
     */
    readonly width: number;

    /**
     * Adds one or more HTML component(s) or [widgets](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html) to the UI.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#add)
     *
     * @param component The component(s) to add to the UI. This can be a widget instance, HTML element, a string value representinga DOM node ID, or an array containing a combination of any of those types. See the example snippets belowfor code examples. Alternatively, you can pass an array of objects with the following specification.
     * @param component.component The componentto add to the UI. This can be a widget instance, HTML element, a string value representinga DOM node ID.
     * @param component.position The position in the view at which to add the                                    component. If not specified, `manual` is used by default.    **Possible Values:** bottom-leading | bottom-left | bottom-right | bottom-trailing | top-leading | top-left | top-right | top-trailing | manual
     * @param component.index The placement index of the component. This index shows where to place                                 the component relative to other components. For example a value of `0` would                                 place it topmost when position is top-*, leftmost for bottom-left and                                 right most for bottom-right.
     * @param position The position in the view at which to add the                                    component. If not specified, `manual` is used by default.    **Possible Values:** bottom-leading | bottom-left | bottom-right | bottom-trailing | top-leading | top-left | top-right | top-trailing | manual
     * @param position.position The position in the view at which to add the                                    component(s). If not specified, `manual` is used by default.    **Possible Values:** bottom-leading | bottom-left | bottom-right | bottom-trailing | top-leading | top-left | top-right | top-trailing | manual
     * @param position.index The placement index of the component(s). This index shows where to place                                 the component relative to other components. For example a value of `0` would                                 place it topmost when position is top-*, leftmost for bottom-left and                                 right most for bottom-right.
     *
     */
    add(component: Widget | HTMLElement | string | any[] | UIAddComponent, position?: string | UIAddPosition): void;
    /**
     * Removes all components from a given position.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#empty)
     *
     * @param position The position from which to remove all components. If not                           specified, `manual` is used by default.    **Possible Values:** bottom-leading | bottom-left | bottom-right | bottom-trailing | top-leading | top-left | top-right | top-trailing | manual
     *
     */
    empty(position?: string): void;
    /**
     * Moves one or more UI component(s) to the specified position.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#move)
     *
     * @param component The component(s) to move.This value can be a widget instance, HTML element, a string value representinga DOM node ID, or an array containing a combination of any of those types. See the example snippets belowfor code examples. Alternatively, you can pass an array of objects with the following specification.
     * @param component.component The componentto move. This can be a widget instance, HTML element, a string value representinga DOM node ID.
     * @param component.position The destination position. The component will be placed                           in the UI [container](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#container) when not provided.                           If not specified, `manual` is used by default.    **Possible Values:** bottom-leading | bottom-left | bottom-right | bottom-trailing | top-leading | top-left | top-right | top-trailing | manual
     * @param position The destination position. The component will be placed                           in the UI [container](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#container) when not provided.    **Possible Values:** bottom-leading | bottom-left | bottom-right | bottom-trailing | top-leading | top-left | top-right | top-trailing | manual
     *
     */
    move(component: Widget | HTMLElement | string | any[] | UIMoveComponent, position?: string): void;
    /**
     * Removes one or more HTML component(s) or [widgets](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html) from the UI.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#remove)
     *
     * @param component The component(s) to remove from the UI. This can be a widget instance, HTML element, a string value representinga DOM node ID, or an array containing a combination of any of those types. See the example snippets belowfor code examples.
     *
     */
    remove(component: Widget | HTMLElement | string | any[]): void;
  }

  interface UIConstructor {
    new (properties?: UIProperties): UI;
  }

  export const UI: UIConstructor;

  interface UIProperties {
    /**
     * The HTML Element that contains the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#container)
     */
    container?: HTMLElement;
    /**
     * Defines the padding for the UI from the top, left, right, and bottom sidesof the container or [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html). If the value is a number,it will be used to pad all sides of the container.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#padding)
     *
     * @default { left: 15, top: 15, right: 15, bottom: 15 }
     */
    padding?: any | number;
    /**
     * The view associated with the UI components.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
  }

  export interface UIAddComponent extends Object {
    /**
     * The componentto add to the UI. This can be a widget instance, HTML element, a string value representinga DOM node ID.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#add)
     */
    component: Widget | HTMLElement | string;
    /**
     * The position in the view at which to add the                                    component. If not specified, `manual` is used by default.    **Possible Values:** bottom-leading | bottom-left | bottom-right | bottom-trailing | top-leading | top-left | top-right | top-trailing | manual
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#add)
     */
    position?: string;
    /**
     * The placement index of the component. This index shows where to place                                 the component relative to other components. For example a value of `0` would                                 place it topmost when position is top-*, leftmost for bottom-left and                                 right most for bottom-right.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#add)
     */
    index?: number;
  }

  export interface UIAddPosition extends Object {
    /**
     * The position in the view at which to add the                                    component(s). If not specified, `manual` is used by default.    **Possible Values:** bottom-leading | bottom-left | bottom-right | bottom-trailing | top-leading | top-left | top-right | top-trailing | manual
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#add)
     */
    position?: string;
    /**
     * The placement index of the component(s). This index shows where to place                                 the component relative to other components. For example a value of `0` would                                 place it topmost when position is top-*, leftmost for bottom-left and                                 right most for bottom-right.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#add)
     */
    index: number;
  }

  export interface UIMoveComponent extends Object {
    /**
     * The componentto move. This can be a widget instance, HTML element, a string value representinga DOM node ID.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#move)
     */
    component: Widget | HTMLElement | string;
    /**
     * The destination position. The component will be placed                           in the UI [container](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#container) when not provided.                           If not specified, `manual` is used by default.    **Possible Values:** bottom-leading | bottom-left | bottom-right | bottom-trailing | top-leading | top-left | top-right | top-trailing | manual
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#move)
     */
    position?: string;
  }

  interface View extends Accessor, corePromise, Evented, DOMContainer {
    /**
     * Collection containing a flat list of all the created [LayerViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html)related to the basemap, operational layers, and group layers in this view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#allLayerViews)
     */
    allLayerViews: Collection<LayerView>;
    /**
     * Represents an ongoing view animation initialized by [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#goTo).You may [watch](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Accessor.html#watch) this property to be notified when the view's extent changes .
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#animation)
     */
    animation: ViewAnimation;
    /**
     * A fatal [error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) returnedwhen the view loses its WebGL context. Watchthis property to properly handle the error and attemptto recover the WebGL context.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#fatalError)
     */
    fatalError: Error;
    /**
     * Allows for adding [graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) directly to the default graphics in the View.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#graphics)
     */
    graphics: Collection<Graphic>;
    /**
     * Options to configure input handling of the View.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#input)
     */
    readonly input: Input;
    /**
     * Indication whether the view is being interacted with (for example when panning).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#interacting)
     *
     * @default false
     */
    readonly interacting: boolean;
    /**
     * A collection containing a hierarchical list of all the created[LayerViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) of the[operational layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#layers) in the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#layerViews)
     */
    layerViews: Collection<LayerView>;
    /**
     * An instance of a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) object to display in the view. A view may only display one map at a time.On the other hand, one [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) may be viewed by multiple [MapViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) and/or[SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) simultaneously.This property is typically set in the constructor of the[MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or[SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). See the [class description](#)for examples demonstrating the relationship between the map and the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#map)
     */
    map: Map;
    /**
     * Options to configure the navigation behavior of the View.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#navigation)
     */
    readonly navigation: Navigation;
    /**
     * Use the padding property to make the [center](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#center),and [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#extent), etc. work off asubsection of the full view. This is particularly useful when layering UIelements or semi-transparent content on top of portions of the view. Seethe [view padding sample](https://developers.arcgis.com/javascript/latest/sample-code/view-padding/index.html) for an exampleof how this works.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#padding)
     *
     * @default {left: 0, top: 0, right: 0, bottom: 0}
     */
    padding: ViewPadding;
    /**
     * When `true`, this property indicates whether the view successfully satisfied all dependencies,signaling that the following conditions are met.* The view has a [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#map). If [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#map)is a [WebMap](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html)or a [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html), then the map or scenemust be [loaded](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#loaded).* The view has a [container](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#container) with a size greater than `0`.* The view has a [spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#spatialReference), a [center](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#center), and a [scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#scale).These also can be inferred by setting an [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#extent).When a view becomes ready it will resolve itself and invokethe callback defined in [when()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#when) where code can execute on a working view. Subsequentchanges to a view's readiness would typically be handled by watching `view.ready` and providinglogic for cases where the [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#map) or [container](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#container) change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#ready)
     *
     * @default false
     */
    readonly ready: boolean;
    /**
     * Represents the current value of one pixel in the unit of the view's [spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#spatialReference).The value of resolution is calculated by dividing the view's [extent width](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#width)by [its width](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#width).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#resolution)
     */
    readonly resolution: number;
    /**
     * The spatial reference of the view. This indicates the[Projected Coordinate System](https://developers.arcgis.com/rest/services-reference/projected-coordinate-systems.htm)or the [Geographic Coordinate System](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm)used to locate geographic features in the map. In a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) the following[supported coordinate systems](esri-views-SceneView.html#supported-coordinate-systems) are available.The spatial reference can either be set explicitly or automatically derived from the following:* In the case of a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html), if the [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#map)is a [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html) instance, the[WebScene.initialViewProperties.spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#initialViewProperties) is used.* In all other cases, the spatial reference is derived from the first layer that loads in this order:  * [map.basemap.baseLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#baseLayers)  * [map.layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#layers)  * [map.ground.layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#layers)When using an [Esri basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap), the default spatial reference isWeb Mercator Auxiliary Sphere.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#spatialReference)
     *
     * @default null
     */
    spatialReference: SpatialReference;
    /**
     * Indication whether the view is animating, being interacted with orresizing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#stationary)
     */
    readonly stationary: boolean;
    /**
     * The view's time extent. Time-aware layers display their temporal data that falls withinthe view's time extent. Setting the view's time extent is similar to setting the spatial[extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#extent) because once the time extent is set, theview updates automatically to conform to the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#timeExtent)
     *
     * @default null
     */
    timeExtent: TimeExtent;
    /**
     * The type of the view is either `2d` (indicating a[MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)) or `3d`(indicating a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html)).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#type)
     */
    readonly type: string;
    /**
     * Indicates whether the view is being updated by additional data requests to the network,or by processing received data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#updating)
     *
     * @default false
     */
    readonly updating: boolean;

    /**
     * Call this method to clear any [fatal errors](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#fatalError) resulting from a lost WebGL context.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#tryFatalErrorRecovery)
     *
     *
     */
    tryFatalErrorRecovery(): void;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) createdon the view for the given layer. The returned promise resolves whenthe layer view for the given layer has been created, or rejects withan error (for example if the layer is not part of the view, or if thelayer type is not supported in this view).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     *
     * @param layer
     *
     */
    whenLayerView(layer: StreamLayer): IPromise<StreamLayerView>;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) createdon the view for the given layer. The returned promise resolves whenthe layer view for the given layer has been created, or rejects withan error (for example if the layer is not part of the view, or if thelayer type is not supported in this view).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     *
     * @param layer
     *
     */
    whenLayerView(layer: FeatureLayer): IPromise<FeatureLayerView>;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) createdon the view for the given layer. The returned promise resolves whenthe layer view for the given layer has been created, or rejects withan error (for example if the layer is not part of the view, or if thelayer type is not supported in this view).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     *
     * @param layer
     *
     */
    whenLayerView(layer: CSVLayer): IPromise<CSVLayerView>;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) createdon the view for the given layer. The returned promise resolves whenthe layer view for the given layer has been created, or rejects withan error (for example if the layer is not part of the view, or if thelayer type is not supported in this view).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     *
     * @param layer
     *
     */
    whenLayerView(layer: GeoJSONLayer): IPromise<GeoJSONLayerView>;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) createdon the view for the given layer. The returned promise resolves whenthe layer view for the given layer has been created, or rejects withan error (for example if the layer is not part of the view, or if thelayer type is not supported in this view).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     *
     * @param layer
     *
     */
    whenLayerView(layer: GeoRSSLayer): IPromise<GeoRSSLayerView>;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) createdon the view for the given layer. The returned promise resolves whenthe layer view for the given layer has been created, or rejects withan error (for example if the layer is not part of the view, or if thelayer type is not supported in this view).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     *
     * @param layer
     *
     */
    whenLayerView(layer: GraphicsLayer): IPromise<GraphicsLayerView>;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) createdon the view for the given layer. The returned promise resolves whenthe layer view for the given layer has been created, or rejects withan error (for example if the layer is not part of the view, or if thelayer type is not supported in this view).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     *
     * @param layer
     *
     */
    whenLayerView(layer: ImageryLayer): IPromise<ImageryLayerView>;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) createdon the view for the given layer. The returned promise resolves whenthe layer view for the given layer has been created, or rejects withan error (for example if the layer is not part of the view, or if thelayer type is not supported in this view).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     *
     * @param layer
     *
     */
    whenLayerView(layer: KMLLayer): IPromise<KMLLayerView>;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) createdon the view for the given layer. The returned promise resolves whenthe layer view for the given layer has been created, or rejects withan error (for example if the layer is not part of the view, or if thelayer type is not supported in this view).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     *
     * @param layer
     *
     */
    whenLayerView(layer: SceneLayer): IPromise<SceneLayerView>;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) createdon the view for the given layer. The returned promise resolves whenthe layer view for the given layer has been created, or rejects withan error (for example if the layer is not part of the view, or if thelayer type is not supported in this view).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     *
     * @param layer The layer for which to obtain its LayerView.
     *
     */
    whenLayerView(layer: Layer): IPromise<LayerView>;
  }

  interface ViewConstructor {
    new (properties?: ViewProperties): View;

    /**
     * Contains the collection of active views on the page. Only views that are [ready](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#ready)appear in the collection.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#views)
     */
    readonly views: Collection<View>;
  }

  export const View: ViewConstructor;

  interface ViewProperties extends DOMContainerProperties {
    /**
     * Collection containing a flat list of all the created [LayerViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html)related to the basemap, operational layers, and group layers in this view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#allLayerViews)
     */
    allLayerViews?: CollectionProperties<LayerViewProperties>;
    /**
     * Represents an ongoing view animation initialized by [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#goTo).You may [watch](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Accessor.html#watch) this property to be notified when the view's extent changes .
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#animation)
     */
    animation?: ViewAnimationProperties;
    /**
     * A fatal [error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) returnedwhen the view loses its WebGL context. Watchthis property to properly handle the error and attemptto recover the WebGL context.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#fatalError)
     */
    fatalError?: Error;
    /**
     * Allows for adding [graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) directly to the default graphics in the View.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#graphics)
     */
    graphics?: CollectionProperties<GraphicProperties>;
    /**
     * A collection containing a hierarchical list of all the created[LayerViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) of the[operational layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#layers) in the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#layerViews)
     */
    layerViews?: CollectionProperties<LayerViewProperties>;
    /**
     * An instance of a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) object to display in the view. A view may only display one map at a time.On the other hand, one [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) may be viewed by multiple [MapViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) and/or[SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) simultaneously.This property is typically set in the constructor of the[MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or[SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). See the [class description](#)for examples demonstrating the relationship between the map and the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#map)
     */
    map?: MapProperties;
    /**
     * Use the padding property to make the [center](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#center),and [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#extent), etc. work off asubsection of the full view. This is particularly useful when layering UIelements or semi-transparent content on top of portions of the view. Seethe [view padding sample](https://developers.arcgis.com/javascript/latest/sample-code/view-padding/index.html) for an exampleof how this works.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#padding)
     *
     * @default {left: 0, top: 0, right: 0, bottom: 0}
     */
    padding?: ViewPadding;
    /**
     * The spatial reference of the view. This indicates the[Projected Coordinate System](https://developers.arcgis.com/rest/services-reference/projected-coordinate-systems.htm)or the [Geographic Coordinate System](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm)used to locate geographic features in the map. In a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) the following[supported coordinate systems](esri-views-SceneView.html#supported-coordinate-systems) are available.The spatial reference can either be set explicitly or automatically derived from the following:* In the case of a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html), if the [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#map)is a [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html) instance, the[WebScene.initialViewProperties.spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#initialViewProperties) is used.* In all other cases, the spatial reference is derived from the first layer that loads in this order:  * [map.basemap.baseLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#baseLayers)  * [map.layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#layers)  * [map.ground.layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#layers)When using an [Esri basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap), the default spatial reference isWeb Mercator Auxiliary Sphere.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#spatialReference)
     *
     * @default null
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * The view's time extent. Time-aware layers display their temporal data that falls withinthe view's time extent. Setting the view's time extent is similar to setting the spatial[extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#extent) because once the time extent is set, theview updates automatically to conform to the change.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#timeExtent)
     *
     * @default null
     */
    timeExtent?: TimeExtentProperties;
  }

  export interface ViewPadding extends Object {
    /**
     * The left padding (in pixels).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#padding)
     */
    left?: number;
    /**
     * The top padding (in pixels).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#padding)
     */
    top?: number;
    /**
     * The right padding (in pixels).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#padding)
     */
    right?: number;
    /**
     * The bottom padding (in pixels).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#padding)
     */
    bottom?: number;
  }

  interface ViewAnimation extends Accessor, corePromise {
    /**
     * The state of the animation.The animation terminates when the state is either `finished` or `stopped`and cannot transition again to `running`. The `finished` stateindicates the animation has successfully ended, while the `stopped`state indicates that the animation was interrupted before it reachedits final target.**Possible Values:** running | finished | stopped | waiting-for-target
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ViewAnimation.html#state)
     *
     * @default running
     */
    readonly state: string;
    /**
     * The target of the animation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ViewAnimation.html#target)
     */
    target: Viewpoint;

    /**
     * Finishes the view animation by immediately going to the target and setsthe state of the animation to `finished`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ViewAnimation.html#finish)
     *
     *
     */
    finish(): void;
    /**
     * Stops the view animation at its current state and sets the state ofthe animation to `stopped`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ViewAnimation.html#stop)
     *
     *
     */
    stop(): void;
  }

  interface ViewAnimationConstructor {
    new (properties?: ViewAnimationProperties): ViewAnimation;
  }

  export const ViewAnimation: ViewAnimationConstructor;

  interface ViewAnimationProperties {
    /**
     * The target of the animation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ViewAnimation.html#target)
     */
    target?: ViewpointProperties;
  }

  interface Search extends Accessor {
    /**
     * Whether search functionality is enabled in the web scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-Search.html#enabled)
     */
    enabled: boolean;
    /**
     * The hint provided with the search dialog.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-Search.html#hintText)
     */
    hintText: string;
    /**
     * A collection of layers to be included in search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-Search.html#layers)
     */
    layers: Collection<SearchLayer>;

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-Search.html#clone)
     *
     *
     */
    clone(): Search;
  }

  interface SearchConstructor {
    new (properties?: SearchProperties): Search;
  }

  export const Search: SearchConstructor;

  interface SearchProperties {
    /**
     * Whether search functionality is enabled in the web scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-Search.html#enabled)
     */
    enabled?: boolean;
    /**
     * The hint provided with the search dialog.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-Search.html#hintText)
     */
    hintText?: string;
    /**
     * A collection of layers to be included in search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-Search.html#layers)
     */
    layers?: CollectionProperties<SearchLayerProperties>;
  }

  interface SearchLayer extends Accessor {
    /**
     * The field to use for search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchLayer.html#field)
     */
    field: SearchLayerField;
    /**
     * The id of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchLayer.html#id)
     */
    id: string;
    /**
     * The sub layer index.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchLayer.html#subLayer)
     */
    subLayer: number;

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchLayer.html#clone)
     *
     *
     */
    clone(): SearchLayer;
  }

  interface SearchLayerConstructor {
    new (properties?: SearchLayerProperties): SearchLayer;
  }

  export const SearchLayer: SearchLayerConstructor;

  interface SearchLayerProperties {
    /**
     * The field to use for search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchLayer.html#field)
     */
    field?: SearchLayerFieldProperties;
    /**
     * The id of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchLayer.html#id)
     */
    id?: string;
    /**
     * The sub layer index.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchLayer.html#subLayer)
     */
    subLayer?: number;
  }

  interface SearchLayerField extends Accessor {
    /**
     * Whether or not the field is an exact match.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchLayerField.html#exactMatch)
     */
    exactMatch: boolean;
    /**
     * The name of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchLayerField.html#name)
     */
    name: string;
    /**
     * The data type of the field.**Possible Values:** small-integer | integer | single | double |long | string | date | oid | geometry | blob | raster |guid | global-id | xml
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchLayerField.html#type)
     */
    type: string;

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchLayerField.html#clone)
     *
     *
     */
    clone(): SearchLayerField;
  }

  interface SearchLayerFieldConstructor {
    new (properties?: SearchLayerFieldProperties): SearchLayerField;
  }

  export const SearchLayerField: SearchLayerFieldConstructor;

  interface SearchLayerFieldProperties {
    /**
     * Whether or not the field is an exact match.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchLayerField.html#exactMatch)
     */
    exactMatch?: boolean;
    /**
     * The name of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchLayerField.html#name)
     */
    name?: string;
    /**
     * The data type of the field.**Possible Values:** small-integer | integer | single | double |long | string | date | oid | geometry | blob | raster |guid | global-id | xml
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchLayerField.html#type)
     */
    type?: string;
  }

  interface Viewing extends Accessor {
    /**
     * An object specifying the search parameters set within the web scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-Viewing.html#search)
     */
    search: Search;

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-Viewing.html#clone)
     *
     *
     */
    clone(): Viewing;
  }

  interface ViewingConstructor {
    new (properties?: ViewingProperties): Viewing;
  }

  export const Viewing: ViewingConstructor;

  interface ViewingProperties {
    /**
     * An object specifying the search parameters set within the web scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-Viewing.html#search)
     */
    search?: SearchProperties;
  }

  interface WebMap extends Map, corePromise {
    /**
     * Object responsible for containing the viewing and editing properties of the WebMap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#applicationProperties)
     */
    applicationProperties: any;
    /**
     * An array of saved geographic extents that allow end users to quickly navigate to a particular area of interest.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#bookmarks)
     */
    bookmarks: Collection<Bookmark>;
    /**
     * The initial view of the WebMap. This object contains propertiessuch as [viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-InitialViewProperties.html#viewpoint),[spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-InitialViewProperties.html#spatialReference),that should be applied to the view when the WebMap loads.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#initialViewProperties)
     */
    initialViewProperties: InitialViewProperties;
    /**
     * Indicates whether the instance has loaded. When `true`,the properties of the object can be accessed. A WebMap is considered loadedwhen its [layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#layers) and [basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#basemap) are created, but notyet loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#loaded)
     *
     * @default false
     */
    readonly loaded: boolean;
    /**
     * The Error object returned if an error occurred while loading.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#loadError)
     *
     * @default null
     */
    readonly loadError: Error;
    /**
     * Represents the status of a [load](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#load) operation.Value | Description------|------------not-loaded | The object's resources have not loaded.loading | The object's resources are currently loading.loaded | The object's resources have loaded without errors.failed | The object's resources failed to load. See [loadError](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#loadError) for more details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#loadStatus)
     *
     * @default not-loaded
     */
    readonly loadStatus: string;
    /**
     * The portal item from which the WebMap is loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#portalItem)
     */
    portalItem: PortalItem;
    /**
     * Provides multiple slides. Each slide has a different "title", "extent", "basemap", "layers" etc.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#presentation)
     */
    presentation: any;
    /**
     * The version of the source document from which the WebMap was read.The WebMap must be version 2.x to load into an app.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#sourceVersion)
     */
    readonly sourceVersion: WebMapSourceVersion;
    /**
     * An array of table objects in the WebMap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#tables)
     */
    tables: any[];
    /**
     * The widgets object contains widgets that should be exposed to the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#widgets)
     */
    widgets: any;

    /**
     * Triggers the loading of the WebMap instance.A WebMap is considered [loaded](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#loaded) when its [operational layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#layers)and [basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#basemap) are fully created.When created with a [portalItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#portalItem), `load()` will firstfetch its data to create the content, otherwise it resolves immediately.The [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) automatically calls the `load()` methodwhen a WebMap instance is added to its [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#map) propertyso it can display in the view and load each individual layer.If the WebMap is used outside of a view, for example to preload it, you must call `load()`explicitly to interact with its resources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#load)
     *
     *
     */
    load(): IPromise<any>;
    /**
     * Loads all the externally loadable resources associated with the webmap.For the webmap this will load the ground, basemap and layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#loadAll)
     *
     *
     */
    loadAll(): IPromise<WebMap>;
  }

  interface WebMapConstructor {
    new (properties?: WebMapProperties): WebMap;

    /**
     * Creates a new instance of [this class]() and initializes it with values from a JSON objectgenerated from a product in the ArcGIS platform. The object passed into the input `json`parameter often comes from a response to a query operation in the REST API or a[toJSON()](http://pro.arcgis.com/en/pro-app/tool-reference/conversion/features-to-json.htm)method from another ArcGIS product. If the [WebMap]() is used outside of a view, you must call [load()](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#load)explicitly to interact with its resources. See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html)topic in the Guide for details and examples of when and how to use this function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#fromJSON)
     *
     * @param json A JSON representation of the instance in the ArcGIS format. See                     the [web map specification](https://developers.arcgis.com/web-map-specification/)                     for more detailed information on serializing web map to JSON.
     *
     */
    fromJSON(json: any): any;
  }

  export const WebMap: WebMapConstructor;

  interface WebMapProperties extends MapProperties {
    /**
     * Object responsible for containing the viewing and editing properties of the WebMap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#applicationProperties)
     */
    applicationProperties?: any;
    /**
     * An array of saved geographic extents that allow end users to quickly navigate to a particular area of interest.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#bookmarks)
     */
    bookmarks?: CollectionProperties<BookmarkProperties>;
    /**
     * The initial view of the WebMap. This object contains propertiessuch as [viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-InitialViewProperties.html#viewpoint),[spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-InitialViewProperties.html#spatialReference),that should be applied to the view when the WebMap loads.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#initialViewProperties)
     */
    initialViewProperties?: InitialViewPropertiesProperties;
    /**
     * The portal item from which the WebMap is loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#portalItem)
     */
    portalItem?: PortalItemProperties;
    /**
     * Provides multiple slides. Each slide has a different "title", "extent", "basemap", "layers" etc.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#presentation)
     */
    presentation?: any;
    /**
     * An array of table objects in the WebMap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#tables)
     */
    tables?: any[];
    /**
     * The widgets object contains widgets that should be exposed to the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#widgets)
     */
    widgets?: any;
  }

  interface ColorBackground extends JSONSupport {
    /**
     * The color of the background.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-background-ColorBackground.html#color)
     *
     * @default black
     */
    color: Color;

    /**
     * Creates a deep clone of the object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-background-ColorBackground.html#clone)
     *
     *
     */
    clone(): ColorBackground;
  }

  interface ColorBackgroundConstructor {
    new (properties?: ColorBackgroundProperties): ColorBackground;

    fromJSON(json: any): ColorBackground;
  }

  export const ColorBackground: ColorBackgroundConstructor;

  interface ColorBackgroundProperties {
    /**
     * The color of the background.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-background-ColorBackground.html#color)
     *
     * @default black
     */
    color?: Color | number[] | string;
  }

  interface Bookmark extends Accessor {
    /**
     * The extent of the specified bookmark item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-Bookmark.html#extent)
     */
    extent: Extent;
    /**
     * The name of the bookmark item. Used as a label in the [Bookmarks](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-Bookmark.html#name)
     */
    name: string;
    /**
     * The URL for a thumbnail image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-Bookmark.html#thumbnail)
     */
    thumbnail: BookmarkThumbnail;
  }

  interface BookmarkConstructor {
    new (properties?: BookmarkProperties): Bookmark;
  }

  export const Bookmark: BookmarkConstructor;

  interface BookmarkProperties {
    /**
     * The extent of the specified bookmark item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-Bookmark.html#extent)
     */
    extent?: ExtentProperties;
    /**
     * The name of the bookmark item. Used as a label in the [Bookmarks](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-Bookmark.html#name)
     */
    name?: string;
    /**
     * The URL for a thumbnail image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-Bookmark.html#thumbnail)
     */
    thumbnail?: BookmarkThumbnail;
  }

  export interface BookmarkThumbnail extends Object {
    /**
     * URL to a thumbnail to display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-Bookmark.html#thumbnail)
     */
    url?: string;
  }

  interface InitialViewProperties extends Accessor, corePromise {
    /**
     * The background color of the [WebMap](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-InitialViewProperties.html#background)
     *
     * @default null
     */
    background: ColorBackground;
    /**
     * The spatial reference of the [WebMap](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html). This indicates the[Projected Coordinate System](https://developers.arcgis.com/rest/services-reference/projected-coordinate-systems.htm)or the [Geographic Coordinate System](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm)used to locate geographic features in the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-InitialViewProperties.html#spatialReference)
     */
    spatialReference: SpatialReference;
    /**
     * The initial viewpoint of the [WebMap](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-InitialViewProperties.html#viewpoint)
     */
    viewpoint: Viewpoint;

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-InitialViewProperties.html#clone)
     *
     *
     */
    clone(): InitialViewProperties;
  }

  interface InitialViewPropertiesConstructor {
    new (properties?: InitialViewPropertiesProperties): InitialViewProperties;
  }

  export const InitialViewProperties: InitialViewPropertiesConstructor;

  interface InitialViewPropertiesProperties {
    /**
     * The background color of the [WebMap](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-InitialViewProperties.html#background)
     *
     * @default null
     */
    background?: ColorBackgroundProperties;
    /**
     * The spatial reference of the [WebMap](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html). This indicates the[Projected Coordinate System](https://developers.arcgis.com/rest/services-reference/projected-coordinate-systems.htm)or the [Geographic Coordinate System](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm)used to locate geographic features in the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-InitialViewProperties.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * The initial viewpoint of the [WebMap](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-InitialViewProperties.html#viewpoint)
     */
    viewpoint?: ViewpointProperties;
  }

  export interface WebMapSourceVersion extends Object {
    /**
     * The major version of the WebMap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#sourceVersion)
     */
    major: number;
    /**
     * The minor version of the WebMap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#sourceVersion)
     */
    minor: number;
  }

  interface WebScene extends Map, corePromise {
    /**
     * Configuration of application and UI elements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#applicationProperties)
     */
    applicationProperties: ApplicationProperties;
    /**
     * *This property only applies to local scenes.*Represents an optional clipping area used to define thebounds or [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of a local scene.If defined, only data (including the basemap) within the area will be displayed.Set the [clippingEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#clippingEnabled) property to `true`to apply the specified clippingArea to the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#clippingArea)
     */
    clippingArea: Extent;
    /**
     * *This property only applies to local scenes.*Determines whether clipping using the [clippingArea](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#clippingArea) isenabled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#clippingEnabled)
     *
     * @default false
     */
    clippingEnabled: boolean;
    /**
     * The height model info of the [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html). This objectdefines the characteristics of the vertical coordinate system used bythe scene. In a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html),the height model info is used to avoid combining layers that haveincompatible vertical coordinate systems.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#heightModelInfo)
     */
    heightModelInfo: HeightModelInfo;
    /**
     * The initial view of the WebScene. This object contains propertiessuch as [viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#viewpoint),[spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#spatialReference),[viewingMode](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#viewingMode), and[environment](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#environment)that should be applied to the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) when the scene loads.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#initialViewProperties)
     */
    initialViewProperties: websceneInitialViewProperties;
    /**
     * Indicates whether the instance has loaded. When `true`,the properties of the object can be accessed. A WebScene is considered loadedwhen its [layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#layers) and [basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#basemap) are fully created, but notyet loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#loaded)
     *
     * @default false
     */
    readonly loaded: boolean;
    /**
     * The Error object returned if an error occurred while loading.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#loadError)
     *
     * @default null
     */
    readonly loadError: Error;
    /**
     * Represents the status of a [load](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#load) operation.Value | Description------|------------not-loaded | The object's resources have not loaded.loading | The object's resources are currently loading.loaded | The object's resources have loaded without errors.failed | The object's resources failed to load. See [loadError](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#loadError) for more details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#loadStatus)
     *
     * @default not-loaded
     */
    readonly loadStatus: string;
    /**
     * The portal item from which the WebScene is loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#portalItem)
     */
    portalItem: PortalItem;
    /**
     * Provides a [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of slidesthat act as bookmarks for saving predefined [viewpoints](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html)and visible layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#presentation)
     */
    presentation: Presentation;
    /**
     * The version of the source document from which the WebScene was read.The WebScene must be version 1.x to load into an app.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#sourceVersion)
     */
    readonly sourceVersion: WebSceneSourceVersion;
    /**
     * The URL to the thumbnail used for the web scene. The thumbnail will by defaultbe the thumbnail URL from the portal item associated to the web scene. The thumbnailof the web scene may be updated by changing the thumbnail URL and saving theweb scene. Use #updateFrom to update the thumbnail automatically from a specifiedview.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#thumbnailUrl)
     */
    thumbnailUrl: string;

    /**
     * Triggers the loading of the WebScene instance.A WebScene is considered [loaded](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#loaded) when its [operational layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#layers),[basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#basemap) and [ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#ground) are fully created.When created with a [portalItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#portalItem), `load()` will firstfetch its data to create the content, otherwise it resolves immediately.The [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) automatically calls the `load()` methodwhen a WebScene instance is added to its [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#map) propertyso it can display in the view and load each individual layer.If the WebScene is used outside of a view, for example to preload it, you must call `load()`explicitly to interact with its resources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#load)
     *
     *
     */
    load(): IPromise<any>;
    /**
     * Loads all the externally loadable resources associated with the webscene.For the webscene this will load the ground, basemap, layers and slide basemaps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#loadAll)
     *
     *
     */
    loadAll(): IPromise<WebScene>;
    /**
     * Saves the webscene to its associated portal item. The portal item to saveto must already exist and be valid. This is a convenience method that willuse [PortalItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#update) to store the webscenein the item. The web scene is saved according to[web scene specification](https://developers.arcgis.com/web-scene-specification/)standards.Use [updateFrom](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#updateFrom) to store the current view properties in thewebscene before saving it.Note that this saves the webscene to its existing item. Depending on howthe scene is shared, users that do not own the scene may modify it. To savean existing scene as a new item owned by the user signed into the portalinstance, use [saveAs()](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#saveAs).The webscene will be automatically loaded if it is not already beforesaving.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#save)
     *
     * @param options Additional options.
     * @param options.ignoreUnsupported When `true`, the scene will save even if it contains unsupported content (layers, renderers, symbols). Any content that is not supported will not be saved and the scene may appear different when reloaded from its portal item.
     *
     */
    save(options?: WebSceneSaveOptions): IPromise<PortalItem>;
    /**
     * Saves the webscene to a new portal item. If saving has completedsuccessfully, then the saved portal item will be set in the portalItemproperty of the WebScene. This is a convenience method that will create a new[PortalItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html) and use[PortalUser.addItem()](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#addItem) to storethe webscene in a [Portal](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html).Use [updateFrom](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#updateFrom) to store the current view properties in thewebscene before saving it.Note that this always saves the webscene as a new portal item owned by the userperforming the edits and executing the `saveAs()` method. If you want to modifythe existing item without changing its ownership use [save()](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#save).The webscene will be automatically loaded if it is not already beforesaving.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#saveAs)
     *
     * @param portalItem The new portal item to whichthe scene will be saved.Portal item properties such as the title or descriptionneed to be explicitly set on the item and will not be automatically copied fromthe current associated scene portal item (if any).
     * @param options additional save options.
     * @param options.folder the folder  in which to save the item.
     * @param options.ignoreUnsupported allow the scene to be saved even in the case it contains unsupported content (layers, renderers, symbols). Any content that is not supported will not be saved and the scene may appear different when reloaded from its portal item.
     *
     */
    saveAs(portalItem: PortalItem | PortalItemProperties, options?: WebSceneSaveAsOptions): IPromise<PortalItem>;
    /**
     * Converts an instance of [this class]() to its ArcGIS portal JSON representation.See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html) topic in the Guideand the [web scene specification](https://developers.arcgis.com/web-scene-specification/)for more information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#toJSON)
     *
     *
     */
    toJSON(): any;
    /**
     * Update properties of the WebScene related to the view. This should usuallybe called just before saving a scene. The following properties are updatedfrom the view:1. `initialViewProperties.spatialReference`2. `initialViewProperties.viewingMode`3. `clippingArea`4. `heightModelInfo`Depending on the provided options, the following properties are also updated:1. `initialViewProperties.environment`2. `initialViewProperties.viewpoint`3. `thumbnail`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#updateFrom)
     *
     * @param view the view to update from.
     * @param options update options.
     * @param options.environmentExcluded do not update the initial  environment from the view, defaults to false.
     * @param options.viewpointExcluded do not update the initial  viewpoint from the view, defaults to false.
     * @param options.thumbnailExcluded do not update the thumbnail  from the view, defaults to viewpointExcluded.
     * @param options.thumbnailSize the size of the thumbnail. Defaults to  600x400 (ratio 1.5:1). Note that the thumbnail size may currently not be  larger than the size of the view.
     *
     */
    updateFrom(view: SceneView, options?: WebSceneUpdateFromOptions): IPromise<any>;
  }

  interface WebSceneConstructor {
    new (properties?: WebSceneProperties): WebScene;

    /**
     * Creates a new instance of [this class]() and initializes it with values from a JSON objectgenerated from a product in the ArcGIS platform. The object passed into the input `json`parameter often comes from a response to a query operation in the REST API or a[toJSON()](http://pro.arcgis.com/en/pro-app/tool-reference/conversion/features-to-json.htm)method from another ArcGIS product. If the [WebScene]() is used outside of a view, you must call [load()](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#load)explicitly to interact with its resources. See the [Using fromJSON()](https://developers.arcgis.com/javascript/latest/guide/using-fromjson/index.html)topic in the Guide for details and examples of when and how to use this function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#fromJSON)
     *
     * @param json A JSON representation of the instance in the ArcGIS format. See                     the [web scene specification](https://developers.arcgis.com/web-scene-specification/)                     for more detailed information on serializing web scenes to JSON.
     *
     */
    fromJSON(json: any): any;
  }

  export const WebScene: WebSceneConstructor;

  interface WebSceneProperties extends MapProperties {
    /**
     * Configuration of application and UI elements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#applicationProperties)
     */
    applicationProperties?: ApplicationPropertiesProperties;
    /**
     * *This property only applies to local scenes.*Represents an optional clipping area used to define thebounds or [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of a local scene.If defined, only data (including the basemap) within the area will be displayed.Set the [clippingEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#clippingEnabled) property to `true`to apply the specified clippingArea to the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#clippingArea)
     */
    clippingArea?: ExtentProperties;
    /**
     * *This property only applies to local scenes.*Determines whether clipping using the [clippingArea](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#clippingArea) isenabled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#clippingEnabled)
     *
     * @default false
     */
    clippingEnabled?: boolean;
    /**
     * The height model info of the [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html). This objectdefines the characteristics of the vertical coordinate system used bythe scene. In a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html),the height model info is used to avoid combining layers that haveincompatible vertical coordinate systems.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#heightModelInfo)
     */
    heightModelInfo?: HeightModelInfoProperties;
    /**
     * The initial view of the WebScene. This object contains propertiessuch as [viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#viewpoint),[spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#spatialReference),[viewingMode](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#viewingMode), and[environment](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#environment)that should be applied to the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) when the scene loads.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#initialViewProperties)
     */
    initialViewProperties?: websceneInitialViewPropertiesProperties;
    /**
     * The portal item from which the WebScene is loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#portalItem)
     */
    portalItem?: PortalItemProperties;
    /**
     * Provides a [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of slidesthat act as bookmarks for saving predefined [viewpoints](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html)and visible layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#presentation)
     */
    presentation?: PresentationProperties;
    /**
     * The URL to the thumbnail used for the web scene. The thumbnail will by defaultbe the thumbnail URL from the portal item associated to the web scene. The thumbnailof the web scene may be updated by changing the thumbnail URL and saving theweb scene. Use #updateFrom to update the thumbnail automatically from a specifiedview.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#thumbnailUrl)
     */
    thumbnailUrl?: string;
  }

  interface ApplicationProperties extends Accessor {
    /**
     * View-specific properties of application and UI elements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-ApplicationProperties.html#viewing)
     */
    viewing: Viewing;

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-ApplicationProperties.html#clone)
     *
     *
     */
    clone(): ApplicationProperties;
  }

  interface ApplicationPropertiesConstructor {
    new (properties?: ApplicationPropertiesProperties): ApplicationProperties;
  }

  export const ApplicationProperties: ApplicationPropertiesConstructor;

  interface ApplicationPropertiesProperties {
    /**
     * View-specific properties of application and UI elements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-ApplicationProperties.html#viewing)
     */
    viewing?: ViewingProperties;
  }

  interface Background extends Accessor, JSONSupport {
    /**
     * Creates a deep clone of the Background.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-background-Background.html#clone)
     *
     *
     */
    clone(): Background;
  }

  interface BackgroundConstructor {
    new (properties?: BackgroundProperties): Background;

    fromJSON(json: any): Background;
  }

  export const Background: BackgroundConstructor;

  interface BackgroundProperties {}

  interface backgroundColorBackground extends Background, JSONSupport {
    /**
     * The color of the background.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-background-ColorBackground.html#color)
     *
     * @default black
     */
    color: Color;

    /**
     * Creates a deep clone of the object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-background-ColorBackground.html#clone)
     *
     *
     */
    clone(): backgroundColorBackground;
  }

  interface backgroundColorBackgroundConstructor {
    new (properties?: backgroundColorBackgroundProperties): backgroundColorBackground;

    fromJSON(json: any): backgroundColorBackground;
  }

  export const backgroundColorBackground: backgroundColorBackgroundConstructor;

  interface backgroundColorBackgroundProperties extends BackgroundProperties {
    /**
     * The color of the background.This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-background-ColorBackground.html#color)
     *
     * @default black
     */
    color?: Color | number[] | string;
  }

  interface Environment extends Accessor {
    /**
     * Specifies whether the atmosphere should be displayed.Typically this consists of haze and sky.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Environment.html#atmosphereEnabled)
     *
     * @default true
     */
    atmosphereEnabled: boolean;
    /**
     * Specifies how the background of the scene (which lies behind sky, stars and atmosphere) should be displayed.The default value of `null` displays a single, fully opaque, black color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Environment.html#background)
     *
     * @default null
     */
    background: Background;
    /**
     * Settings for defining the lighting of the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Environment.html#lighting)
     */
    lighting: Lighting;
    /**
     * Specifies whether stars should be displayed in the sky.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Environment.html#starsEnabled)
     *
     * @default true
     */
    starsEnabled: boolean;

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Environment.html#clone)
     *
     *
     */
    clone(): Environment;
  }

  interface EnvironmentConstructor {
    new (properties?: EnvironmentProperties): Environment;
  }

  export const Environment: EnvironmentConstructor;

  interface EnvironmentProperties {
    /**
     * Specifies whether the atmosphere should be displayed.Typically this consists of haze and sky.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Environment.html#atmosphereEnabled)
     *
     * @default true
     */
    atmosphereEnabled?: boolean;
    /**
     * Specifies how the background of the scene (which lies behind sky, stars and atmosphere) should be displayed.The default value of `null` displays a single, fully opaque, black color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Environment.html#background)
     *
     * @default null
     */
    background?: BackgroundProperties;
    /**
     * Settings for defining the lighting of the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Environment.html#lighting)
     */
    lighting?: LightingProperties;
    /**
     * Specifies whether stars should be displayed in the sky.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Environment.html#starsEnabled)
     *
     * @default true
     */
    starsEnabled?: boolean;
  }

  interface websceneInitialViewProperties extends Accessor, corePromise {
    /**
     * The initial environment settings of the [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#environment)
     */
    environment: Environment;
    /**
     * The spatial reference of the [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html). This indicates the[Projected Coordinate System](https://developers.arcgis.com/rest/services-reference/projected-coordinate-systems.htm)or the [Geographic Coordinate System](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm)used to locate geographic features in the map. In a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) the following[supported coordinate systems](esri-views-SceneView.html#supported-coordinate-systems) are available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#spatialReference)
     */
    spatialReference: SpatialReference;
    /**
     * The viewing mode of the scene. Global scenes allow the user tonavigate the globe. Local scenes allow for navigation and featuredisplay in a particular "localized" area. Users may also navigatethe view's camera below the surface of a basemap in local scenes.**Possible Values:** global | local
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#viewingMode)
     *
     * @default global
     */
    viewingMode: string;
    /**
     * The initial viewpoint of the [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#viewpoint)
     */
    viewpoint: Viewpoint;

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#clone)
     *
     *
     */
    clone(): websceneInitialViewProperties;
  }

  interface websceneInitialViewPropertiesConstructor {
    new (properties?: websceneInitialViewPropertiesProperties): websceneInitialViewProperties;
  }

  export const websceneInitialViewProperties: websceneInitialViewPropertiesConstructor;

  interface websceneInitialViewPropertiesProperties {
    /**
     * The initial environment settings of the [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#environment)
     */
    environment?: EnvironmentProperties;
    /**
     * The spatial reference of the [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html). This indicates the[Projected Coordinate System](https://developers.arcgis.com/rest/services-reference/projected-coordinate-systems.htm)or the [Geographic Coordinate System](https://developers.arcgis.com/rest/services-reference/geographic-coordinate-systems.htm)used to locate geographic features in the map. In a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) the following[supported coordinate systems](esri-views-SceneView.html#supported-coordinate-systems) are available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * The viewing mode of the scene. Global scenes allow the user tonavigate the globe. Local scenes allow for navigation and featuredisplay in a particular "localized" area. Users may also navigatethe view's camera below the surface of a basemap in local scenes.**Possible Values:** global | local
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#viewingMode)
     *
     * @default global
     */
    viewingMode?: string;
    /**
     * The initial viewpoint of the [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#viewpoint)
     */
    viewpoint?: ViewpointProperties;
  }

  interface Lighting extends Accessor, corePromise {
    /**
     * The time and date for which the sun position and light direction is computed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Lighting.html#date)
     *
     * @default null
     */
    date: Date;
    /**
     * Indicates whether to show shadows cast by the sun. Shadows are only displayed for real world 3D objects.Terrain doesn't cast shadows. In local scenes at small zoom levels, shadows are not displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Lighting.html#directShadowsEnabled)
     *
     * @default false
     */
    directShadowsEnabled: boolean;
    /**
     * The UTC time zone offset in hours that should be displayed in the UI to representthe date. This value does not have an impact on the actual lighting of the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Lighting.html#displayUTCOffset)
     *
     * @default null
     */
    displayUTCOffset: number;

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Lighting.html#clone)
     *
     *
     */
    clone(): Lighting;
  }

  interface LightingConstructor {
    new (properties?: LightingProperties): Lighting;
  }

  export const Lighting: LightingConstructor;

  interface LightingProperties {
    /**
     * The time and date for which the sun position and light direction is computed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Lighting.html#date)
     *
     * @default null
     */
    date?: DateProperties;
    /**
     * Indicates whether to show shadows cast by the sun. Shadows are only displayed for real world 3D objects.Terrain doesn't cast shadows. In local scenes at small zoom levels, shadows are not displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Lighting.html#directShadowsEnabled)
     *
     * @default false
     */
    directShadowsEnabled?: boolean;
    /**
     * The UTC time zone offset in hours that should be displayed in the UI to representthe date. This value does not have an impact on the actual lighting of the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Lighting.html#displayUTCOffset)
     *
     * @default null
     */
    displayUTCOffset?: number;
  }

  interface Presentation extends Accessor {
    /**
     * A collection of [slides](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html) that bookmark[viewpoints](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html), visible layers, and other settingspreviously defined in a [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Presentation.html#slides)
     */
    slides: Collection<Slide>;

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Presentation.html#clone)
     *
     *
     */
    clone(): Presentation;
  }

  interface PresentationConstructor {
    new (properties?: PresentationProperties): Presentation;
  }

  export const Presentation: PresentationConstructor;

  interface PresentationProperties {
    /**
     * A collection of [slides](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html) that bookmark[viewpoints](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html), visible layers, and other settingspreviously defined in a [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Presentation.html#slides)
     */
    slides?: CollectionProperties<SlideProperties>;
  }

  interface Slide extends Accessor {
    /**
     * The basemap of the scene. Only the [base](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#baseLayers)and [reference](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#referenceLayers) layers of the basemapare stored in a slide.This value can be an instance of [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html) or oneof the strings listed in the table below.Value | Description------|------------streets | ![basemap-streets](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/streets.jpg)satellite | ![basemap-satellite](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/satellite.jpg)hybrid | ![basemap-hybrid](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/hybrid.jpg)topo | ![basemap-topo](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/topo.jpg)gray | ![basemap-gray](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/gray.jpg)dark-gray | ![basemap-dark-gray](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/dark-gray.jpg)oceans | ![basemap-oceans](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/oceans.jpg)national-geographic | ![basemap-national-geographic](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/national-geographic.jpg)terrain | ![basemap-terrain](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/terrain.jpg)osm | ![basemap-osm](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/osm.jpg)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#basemap)
     */
    basemap: Basemap;
    /**
     * The description of the slide.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#description)
     */
    description: SlideDescription;
    /**
     * Represents settings that affect the environment in which the WebScene is displayed (such as lighting).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#environment)
     */
    environment: Environment;
    /**
     * Ground properties for this slide.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#ground)
     */
    ground: SlideGround;
    /**
     * The unique id of a slide within the[slides property](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Presentation.html#slides) of a[Presentation](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Presentation.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#id)
     */
    id: string;
    /**
     * A data URI encoded thumbnail.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#thumbnail)
     */
    thumbnail: SlideThumbnail;
    /**
     * The title of the slide.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#title)
     */
    title: SlideTitle;
    /**
     * The viewpoint of the slide. This acts like a bookmark, saving a predefinedlocation or point of view from which to view the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#viewpoint)
     */
    viewpoint: Viewpoint;
    /**
     * The visible layers of the scene. This is a collection ofobjects that stores references (by ID) to the[scene layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#layers) and[ground layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#layers) that are set as `visible` when aslide is applied to a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).When assigning visible layers, the following types of values will be automaticallycasted:- Array (or [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html)) of [Layer instances](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html): `[layerInstance, layerInstance]`- Array (or [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html)) of [Layer IDs](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#id): `["layer-1", "layer-2"]`The specification for each object in the collection is outlined in the table below.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#visibleLayers)
     */
    visibleLayers: Collection<SlideVisibleLayers>;

    /**
     * Applies a slide's settings to a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#applyTo)
     *
     * @param view The SceneView the slide should be applied to.
     * @param options Animation options. See properties below for object specifications.
     * @param options.animate Indicates whether to animate the slide transition.
     * @param options.speedFactor Increases or decreases the animation speed by the specified factor. A speedFactor  of 2 will make the animation twice as fast, while a speedFactor of 0.5 will make the animation half as fast. Setting  the speed factor will automatically adapt the default maxDuration accordingly.
     * @param options.duration Set the exact duration (in milliseconds) of the animation. Note that by default, animation  duration is calculated based on the time required to reach the target at a constant speed. Setting duration  overrides the speedFactor option. Note that the resulting duration is still limited to the maxDuration.
     * @param options.maxDuration The maximum allowed duration (in milliseconds) of the animation. The  default maxDuration value takes the specified speedFactor into account.
     * @param options.easing The easing function to use for  the animation. This may either be a preset (named) function, or a user specified function. Supported named presets are:    `linear`,    `in-cubic`, `out-cubic`, `in-out-cubic`,    `in-expo`, `out-expo`, `in-out-expo`    By default, animations that are less than 1000 ms use an out easing function; longer animations use an in-out function.
     * @param options.signal Signal object that can be used to abort the asynchronous task. Aborting will cause  the slide animation to stop. The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named  `AbortError` when an abort is signaled. See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController)  for more information on how to construct a controller that can be used to deliver abort signals.
     *
     */
    applyTo(view: SceneView, options?: SlideApplyToOptions): IPromise<Slide>;
    /**
     * Creates a deep clone of this object. Note that the basemap instance is cloned, but thelayers within the basemap are copied.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#clone)
     *
     *
     */
    clone(): Slide;
    /**
     * Updates a slide from a [WebScene's slides](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Presentation.html#slides).Updating the slide is asynchronous and a snapshot of the view is only complete once thereturned promise has resolved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#updateFrom)
     *
     * @param view The SceneView from which the slide should update.
     * @param options Update options. See properties below for object specifications.
     * @param options.screenshot Screenshot options to use. See properties below for object specifications.
     *
     */
    updateFrom(view: SceneView, options?: SlideUpdateFromOptions): IPromise<Slide>;
  }

  interface SlideConstructor {
    new (properties?: SlideProperties): Slide;

    /**
     * Creates a slide from a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html), which may be added to the[slides](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Presentation.html#slides) in the WebScene's[presentation](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#presentation). Updating the slideis asynchronous and a snapshot of the view is only complete once thereturned promise has resolved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#createFrom)
     *
     * @param view The SceneView from which the slide should be created.
     * @param options Creation options. See properties below for object specifications.
     * @param options.screenshot Screenshot options to use. See properties below for object specifications.
     *
     */
    createFrom(view: SceneView, options?: SlideCreateFromOptions): IPromise<Slide>;
  }

  export const Slide: SlideConstructor;

  interface SlideProperties {
    /**
     * The basemap of the scene. Only the [base](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#baseLayers)and [reference](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#referenceLayers) layers of the basemapare stored in a slide.This value can be an instance of [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html) or oneof the strings listed in the table below.Value | Description------|------------streets | ![basemap-streets](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/streets.jpg)satellite | ![basemap-satellite](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/satellite.jpg)hybrid | ![basemap-hybrid](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/hybrid.jpg)topo | ![basemap-topo](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/topo.jpg)gray | ![basemap-gray](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/gray.jpg)dark-gray | ![basemap-dark-gray](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/dark-gray.jpg)oceans | ![basemap-oceans](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/oceans.jpg)national-geographic | ![basemap-national-geographic](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/national-geographic.jpg)terrain | ![basemap-terrain](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/terrain.jpg)osm | ![basemap-osm](https://developers.arcgis.com/javascript/assets/img/apiref/basemap/osm.jpg)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#basemap)
     */
    basemap?: BasemapProperties | string;
    /**
     * The description of the slide.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#description)
     */
    description?: SlideDescriptionProperties | string;
    /**
     * Represents settings that affect the environment in which the WebScene is displayed (such as lighting).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#environment)
     */
    environment?: EnvironmentProperties;
    /**
     * Ground properties for this slide.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#ground)
     */
    ground?: SlideGroundProperties;
    /**
     * The unique id of a slide within the[slides property](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Presentation.html#slides) of a[Presentation](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Presentation.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#id)
     */
    id?: string;
    /**
     * A data URI encoded thumbnail.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#thumbnail)
     */
    thumbnail?: SlideThumbnailProperties | string;
    /**
     * The title of the slide.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#title)
     */
    title?: SlideTitleProperties | string;
    /**
     * The viewpoint of the slide. This acts like a bookmark, saving a predefinedlocation or point of view from which to view the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#viewpoint)
     */
    viewpoint?: ViewpointProperties;
    /**
     * The visible layers of the scene. This is a collection ofobjects that stores references (by ID) to the[scene layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#layers) and[ground layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#layers) that are set as `visible` when aslide is applied to a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).When assigning visible layers, the following types of values will be automaticallycasted:- Array (or [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html)) of [Layer instances](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html): `[layerInstance, layerInstance]`- Array (or [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html)) of [Layer IDs](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#id): `["layer-1", "layer-2"]`The specification for each object in the collection is outlined in the table below.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#visibleLayers)
     */
    visibleLayers?: CollectionProperties<SlideVisibleLayersProperties>;
  }

  export interface SlideApplyToOptions extends Object {
    /**
     * Indicates whether to animate the slide transition.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#applyTo)
     *
     * @default true
     */
    animate?: boolean;
    /**
     * Increases or decreases the animation speed by the specified factor. A speedFactor  of 2 will make the animation twice as fast, while a speedFactor of 0.5 will make the animation half as fast. Setting  the speed factor will automatically adapt the default maxDuration accordingly.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#applyTo)
     *
     * @default 1
     */
    speedFactor?: number;
    /**
     * Set the exact duration (in milliseconds) of the animation. Note that by default, animation  duration is calculated based on the time required to reach the target at a constant speed. Setting duration  overrides the speedFactor option. Note that the resulting duration is still limited to the maxDuration.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#applyTo)
     */
    duration?: number;
    /**
     * The maximum allowed duration (in milliseconds) of the animation. The  default maxDuration value takes the specified speedFactor into account.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#applyTo)
     *
     * @default 8000
     */
    maxDuration?: number;
    /**
     * The easing function to use for  the animation. This may either be a preset (named) function, or a user specified function. Supported named presets are:    `linear`,    `in-cubic`, `out-cubic`, `in-out-cubic`,    `in-expo`, `out-expo`, `in-out-expo`    By default, animations that are less than 1000 ms use an out easing function; longer animations use an in-out function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#applyTo)
     */
    easing?: string | EasingFunction;
    /**
     * Signal object that can be used to abort the asynchronous task. Aborting will cause  the slide animation to stop. The returned promise will be rejected with an [Error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) named  `AbortError` when an abort is signaled. See also [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController)  for more information on how to construct a controller that can be used to deliver abort signals.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#applyTo)
     */
    signal?: AbortSignal;
  }

  export interface SlideCreateFromOptions extends Object {
    /**
     * Screenshot options to use. See properties below for object specifications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#createFrom)
     */
    screenshot?: SlideCreateFromOptionsScreenshot;
  }

  export interface SlideCreateFromOptionsScreenshot extends Object {
    /**
     * The image format.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#createFrom)
     *
     * @default jpeg
     */
    format?: string;
    /**
     * The image quality (due to compression).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#createFrom)
     *
     * @default 80
     */
    quality?: number;
    /**
     * The image width.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#createFrom)
     *
     * @default 120
     */
    width?: number;
    /**
     * The image height.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#createFrom)
     *
     * @default 75
     */
    height?: number;
  }

  export interface SlideDescriptionProperties extends Object {
    /**
     * The description.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#description)
     */
    text?: string;
  }

  export interface SlideDescription extends AnonymousAccessor {
    /**
     * The description.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#description)
     */
    text?: string;
  }

  export interface SlideGroundProperties extends Object {
    /**
     * Ground opacity
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#ground)
     */
    opacity?: number;
  }

  export interface SlideGround extends AnonymousAccessor {
    /**
     * Ground opacity
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#ground)
     */
    opacity?: number;
  }

  export interface SlideThumbnailProperties extends Object {
    /**
     * The URI pointing to the thumbnail image representingthe slide.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#thumbnail)
     */
    url?: string;
  }

  export interface SlideThumbnail extends AnonymousAccessor {
    /**
     * The URI pointing to the thumbnail image representingthe slide.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#thumbnail)
     */
    url?: string;
  }

  export interface SlideTitleProperties extends Object {
    /**
     * The title.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#title)
     */
    text?: string;
  }

  export interface SlideTitle extends AnonymousAccessor {
    /**
     * The title.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#title)
     */
    text?: string;
  }

  export interface SlideUpdateFromOptions extends Object {
    /**
     * Screenshot options to use. See properties below for object specifications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#updateFrom)
     */
    screenshot: SlideUpdateFromOptionsScreenshot;
  }

  export interface SlideUpdateFromOptionsScreenshot extends Object {
    /**
     * The image format.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#updateFrom)
     *
     * @default jpeg
     */
    format?: string;
    /**
     * The image quality (due to compression).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#updateFrom)
     *
     * @default 80
     */
    quality?: number;
    /**
     * The image width.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#updateFrom)
     *
     * @default 120
     */
    width?: number;
    /**
     * The image height.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#updateFrom)
     *
     * @default 75
     */
    height?: number;
  }

  export interface SlideVisibleLayersProperties extends Object {
    /**
     * The ID of a [layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#id)in the [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#layers) or [Ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#layers)that is made `visible` in the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) whenthe slide is applied to the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#visibleLayers)
     */
    id?: string;
    /**
     * The service ids of the visible sublayers on thelayer specified by the layer id. If this is not present, the visibilities of thesublayers are not changed when applying the slide.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#visibleLayers)
     */
    sublayerIds?: number[];
  }

  export interface SlideVisibleLayers extends AnonymousAccessor {
    /**
     * The ID of a [layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#id)in the [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#layers) or [Ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#layers)that is made `visible` in the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) whenthe slide is applied to the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#visibleLayers)
     */
    id: string;
    /**
     * The service ids of the visible sublayers on thelayer specified by the layer id. If this is not present, the visibilities of thesublayers are not changed when applying the slide.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#visibleLayers)
     */
    sublayerIds: number[];
  }

  export interface WebSceneSaveAsOptions extends Object {
    /**
     * the folder  in which to save the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#saveAs)
     */
    folder?: PortalFolder;
    /**
     * allow the scene to be saved even in the case it contains unsupported content (layers, renderers, symbols). Any content that is not supported will not be saved and the scene may appear different when reloaded from its portal item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#saveAs)
     */
    ignoreUnsupported?: boolean;
  }

  export interface WebSceneSaveOptions extends Object {
    /**
     * When `true`, the scene will save even if it contains unsupported content (layers, renderers, symbols). Any content that is not supported will not be saved and the scene may appear different when reloaded from its portal item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#save)
     */
    ignoreUnsupported?: boolean;
  }

  export interface WebSceneSourceVersion extends Object {
    /**
     * The major version of the WebScene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#sourceVersion)
     */
    major: number;
    /**
     * The minor version of the WebScene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#sourceVersion)
     */
    minor: number;
  }

  export interface WebSceneUpdateFromOptions extends Object {
    /**
     * do not update the initial  environment from the view, defaults to false.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#updateFrom)
     */
    environmentExcluded?: boolean;
    /**
     * do not update the initial  viewpoint from the view, defaults to false.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#updateFrom)
     */
    viewpointExcluded?: boolean;
    /**
     * do not update the thumbnail  from the view, defaults to viewpointExcluded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#updateFrom)
     */
    thumbnailExcluded?: boolean;
    /**
     * the size of the thumbnail. Defaults to  600x400 (ratio 1.5:1). Note that the thumbnail size may currently not be  larger than the size of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#updateFrom)
     */
    thumbnailSize?: WebSceneUpdateFromOptionsThumbnailSize;
  }

  export interface WebSceneUpdateFromOptionsThumbnailSize extends Object {
    /**
     * the width of the thumbnail.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#updateFrom)
     */
    width: number;
    /**
     * the height of the thumbnail.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#updateFrom)
     */
    height: number;
  }

  interface AreaMeasurement2D extends Widget {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D.html#iconClass)
     */
    iconClass: string;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the area values.**Possible Values:** metric | imperial | square-inches | square-feet | square-us-feet | square-yards | square-miles | square-meters | square-kilometers | acres | ares | hectares
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D.html#unit)
     */
    unit:
      | "metric"
      | "imperial"
      | "square-inches"
      | "square-feet"
      | "square-us-feet"
      | "square-yards"
      | "square-miles"
      | "square-meters"
      | "square-kilometers"
      | "acres"
      | "ares"
      | "hectares";
    /**
     * List of available units and unit systems (imperial, metric) for displaying the area values.By default, the following units are included: `metric`, `imperial`, `square-inches`, `square-feet`, `square-us-feet`, `square-yards`, `square-miles`, `square-meters`, `square-kilometers`, `acres`, `ares`, `hectares`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D.html#unitOptions)
     */
    unitOptions: string[];
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). Set this to link the widgetto a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D.html#view)
     */
    view: MapView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[AreaMeasurement2DViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html)class to access all properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D.html#viewModel)
     */
    viewModel: AreaMeasurement2DViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D.html#render)
     *
     *
     */
    render(): any;
  }

  interface AreaMeasurement2DConstructor {
    new (properties?: AreaMeasurement2DProperties): AreaMeasurement2D;
  }

  export const AreaMeasurement2D: AreaMeasurement2DConstructor;

  interface AreaMeasurement2DProperties extends WidgetProperties {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D.html#iconClass)
     */
    iconClass?: string;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the area values.**Possible Values:** metric | imperial | square-inches | square-feet | square-us-feet | square-yards | square-miles | square-meters | square-kilometers | acres | ares | hectares
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D.html#unit)
     */
    unit?:
      | "metric"
      | "imperial"
      | "square-inches"
      | "square-feet"
      | "square-us-feet"
      | "square-yards"
      | "square-miles"
      | "square-meters"
      | "square-kilometers"
      | "acres"
      | "ares"
      | "hectares";
    /**
     * List of available units and unit systems (imperial, metric) for displaying the area values.By default, the following units are included: `metric`, `imperial`, `square-inches`, `square-feet`, `square-us-feet`, `square-yards`, `square-miles`, `square-meters`, `square-kilometers`, `acres`, `ares`, `hectares`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D.html#unitOptions)
     */
    unitOptions?: string[];
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). Set this to link the widgetto a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D.html#view)
     */
    view?: MapViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[AreaMeasurement2DViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html)class to access all properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D.html#viewModel)
     */
    viewModel?: AreaMeasurement2DViewModel;
  }

  interface AreaMeasurement2DViewModel {
    /**
     * The threshold distance used by the "auto" mode to switch between planar and geodesiclinear computations. The threshold is measured in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#geodesicDistanceThreshold)
     *
     * @default 100000
     */
    geodesicDistanceThreshold: number;
    /**
     * The area and perimeter of the measurement polygon in square meters and meters respectively.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#measurement)
     */
    readonly measurement: AreaMeasurement2DViewModelMeasurement;
    /**
     * This property returns the locale specific representation of the area and perimeter.Areas and perimeters are rounded to two decimal places. Areas are sourced from the [measurement](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#measurement) property(in square meters) and converted to the user defined units/system and mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#measurementLabel)
     */
    readonly measurementLabel: AreaMeasurement2DViewModelMeasurementLabel;
    /**
     * The mode used to calculate the area and perimeter of a polygon.**Possible Values:** auto | planar | geodesic
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#mode)
     *
     * @default auto
     */
    mode: "auto" | "planar" | "geodesic";
    /**
     * An array of valid mode values. By default, the following units are included: `auto`, `planar`, `geodesic`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#modes)
     */
    readonly modes: string[];
    /**
     * The ViewModel's state.**Possible Values:** disabled | ready | measuring | measured   Value    | Description------------|-------------disabled    | not ready yetready       | ready for measuringmeasuring   | measuring has startedmeasured    | measuring has finished
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the area values.**Possible Values:** metric | imperial | square-inches | square-feet | square-us-feet | square-yards | square-miles | square-meters | square-kilometers | acres | ares | hectares
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#unit)
     */
    unit:
      | "metric"
      | "imperial"
      | "square-inches"
      | "square-feet"
      | "square-us-feet"
      | "square-yards"
      | "square-miles"
      | "square-meters"
      | "square-kilometers"
      | "acres"
      | "ares"
      | "hectares";
    /**
     * List of available units and unit systems (imperial, metric) for displaying the area values.By default, the following units are included: `metric`, `imperial`, `square-inches`, `square-feet`, `square-us-feet`, `square-yards`, `square-miles`, `square-meters`, `square-kilometers`, `acres`, `ares`, `hectares`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#unitOptions)
     */
    unitOptions: string[];
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#view)
     */
    view: MapView;

    /**
     * Clears the current measurement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#clearMeasurement)
     *
     *
     */
    clearMeasurement(): void;
    /**
     * Starts a new measurement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#newMeasurement)
     *
     *
     */
    newMeasurement(): void;
  }

  interface AreaMeasurement2DViewModelConstructor {
    new (properties?: any): AreaMeasurement2DViewModel;
  }

  export const AreaMeasurement2DViewModel: AreaMeasurement2DViewModelConstructor;

  export interface AreaMeasurement2DViewModelMeasurement extends Object {
    /**
     * The area (m²).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#measurement)
     */
    area: number;
    /**
     * The perimeter (m).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#measurement)
     */
    perimeter: number;
    /**
     * Measurement area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#measurement)
     */
    geometry: any;
  }

  export interface AreaMeasurement2DViewModelMeasurementLabel extends Object {
    /**
     * The area (m²).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#measurementLabel)
     */
    area: number;
    /**
     * The perimeter (m).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#measurementLabel)
     */
    perimeter: number;
  }

  interface AreaMeasurement3D extends Widget {
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the area values.**Possible Values:** metric | imperial | square-inches | square-feet | square-us-feet | square-yards | square-miles | square-meters | square-kilometers | acres | ares | hectares
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D.html#unit)
     */
    unit: string;
    /**
     * List of available units and unit systems (imperial, metric) for displaying the area values.By default, the following units are included: `metric`, `imperial`, `square-inches`, `square-feet`, `square-us-feet`, `square-yards`, `square-miles`, `square-meters`, `square-kilometers`, `acres`, `ares`, `hectares`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D.html#unitOptions)
     */
    unitOptions: string[];
    /**
     * A reference to the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D.html#view)
     */
    view: SceneView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[AreaMeasurement3DViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D.html#viewModel)
     */
    viewModel: AreaMeasurement3DViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D.html#render)
     *
     *
     */
    render(): any;
  }

  interface AreaMeasurement3DConstructor {
    new (properties?: AreaMeasurement3DProperties): AreaMeasurement3D;
  }

  export const AreaMeasurement3D: AreaMeasurement3DConstructor;

  interface AreaMeasurement3DProperties extends WidgetProperties {
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the area values.**Possible Values:** metric | imperial | square-inches | square-feet | square-us-feet | square-yards | square-miles | square-meters | square-kilometers | acres | ares | hectares
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D.html#unit)
     */
    unit?: string;
    /**
     * List of available units and unit systems (imperial, metric) for displaying the area values.By default, the following units are included: `metric`, `imperial`, `square-inches`, `square-feet`, `square-us-feet`, `square-yards`, `square-miles`, `square-meters`, `square-kilometers`, `acres`, `ares`, `hectares`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D.html#unitOptions)
     */
    unitOptions?: string[];
    /**
     * A reference to the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D.html#view)
     */
    view?: SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[AreaMeasurement3DViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D.html#viewModel)
     */
    viewModel?: AreaMeasurement3DViewModelProperties;
  }

  interface AreaMeasurement3DViewModel extends Accessor {
    /**
     * The current measurement of the area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#measurement)
     */
    readonly measurement: AreaMeasurement3DViewModelMeasurement;
    /**
     * The view model's state.Value | Description------------|-------------disabled | not ready yetready | ready for measuringmeasuring | currently measuringmeasured | measuring has finished
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the area values.**Possible Values:** metric | imperial | square-inches | square-feet | square-us-feet | square-yards | square-miles | square-meters | square-kilometers | acres | ares | hectares
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#unit)
     */
    unit: string;
    /**
     * List of available units and unit systems (imperial, metric) for displaying the area values.By default, the following units are included: `metric`, `imperial`, `square-inches`, `square-feet`, `square-us-feet`, `square-yards`, `square-miles`, `square-meters`, `square-kilometers`, `acres`, `ares`, `hectares`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#unitOptions)
     */
    unitOptions: string[];
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#view)
     */
    view: SceneView;

    /**
     * Clears the current measurement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#clearMeasurement)
     *
     *
     */
    clearMeasurement(): void;
    /**
     * Starts a new measurement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#newMeasurement)
     *
     *
     */
    newMeasurement(): void;
  }

  interface AreaMeasurement3DViewModelConstructor {
    new (properties?: AreaMeasurement3DViewModelProperties): AreaMeasurement3DViewModel;
  }

  export const AreaMeasurement3DViewModel: AreaMeasurement3DViewModelConstructor;

  interface AreaMeasurement3DViewModelProperties {
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the area values.**Possible Values:** metric | imperial | square-inches | square-feet | square-us-feet | square-yards | square-miles | square-meters | square-kilometers | acres | ares | hectares
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#unit)
     */
    unit?: string;
    /**
     * List of available units and unit systems (imperial, metric) for displaying the area values.By default, the following units are included: `metric`, `imperial`, `square-inches`, `square-feet`, `square-us-feet`, `square-yards`, `square-miles`, `square-meters`, `square-kilometers`, `acres`, `ares`, `hectares`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#unitOptions)
     */
    unitOptions?: string[];
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#view)
     */
    view?: SceneViewProperties;
  }

  export interface AreaMeasurement3DViewModelMeasurement extends Object {
    /**
     * Describes the mode in which the measurement was taken. In `euclidean` mode, the area and perimeter length are computed froma flat polygon with straight segments on the perimeter in the [ECEF](https://en.wikipedia.org/wiki/ECEF) coordinate system.In `geodesic` mode, the area and perimeter length are computed from a geodesic polygon on the WGS84 ellipsoid.**Possible Values:** euclidean | geodesic
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#measurement)
     */
    measurementMode: string;
    /**
     * The area of the polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#measurement)
     */
    area: MeasurementValue;
    /**
     * The perimeter length of the polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#measurement)
     */
    perimeterLength: MeasurementValue;
  }

  /**
   * Measurement value.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#MeasurementValue)
   */
  export interface MeasurementValue extends Object {
    /**
     * Textual representation of the measured value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#MeasurementValue)
     */
    text: string;
    /**
     * State of the measured value.Value | Description------------|-------------available | measured value is availableunavailable | measured value is not available due an incomplete measurementinvalid | measured value is not available due to an invalid measurement configuration (e.g. self-intersecting polygon)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#MeasurementValue)
     */
    state: string;
  }

  interface Attribution extends Widget {
    /**
     * Full attribution text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution.html#attributionText)
     */
    readonly attributionText: string;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution.html#iconClass)
     */
    iconClass: string;
    /**
     * Text used to split attribution by [layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution.html#itemDelimiter)
     *
     * @default |
     */
    itemDelimiter: string;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[AttributionViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution-AttributionViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution.html#viewModel)
     */
    viewModel: AttributionViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution.html#render)
     *
     *
     */
    render(): any;
  }

  interface AttributionConstructor {
    new (properties?: AttributionProperties): Attribution;
  }

  export const Attribution: AttributionConstructor;

  interface AttributionProperties extends WidgetProperties {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution.html#iconClass)
     */
    iconClass?: string;
    /**
     * Text used to split attribution by [layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution.html#itemDelimiter)
     *
     * @default |
     */
    itemDelimiter?: string;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[AttributionViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution-AttributionViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution.html#viewModel)
     */
    viewModel?: AttributionViewModelProperties;
  }

  interface AttributionViewModel extends Accessor {
    /**
     * A collection of [AttributionItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution-AttributionViewModel.html#AttributionItem)s.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution-AttributionViewModel.html#items)
     */
    readonly items: Collection<AttributionItem>;
    /**
     * The view model's state.**Possible Values:** ready | disabled
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution-AttributionViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: "ready" | "disabled";
    /**
     * The view from which the view model will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution-AttributionViewModel.html#view)
     */
    view: MapView | SceneView;
  }

  interface AttributionViewModelConstructor {
    new (properties?: AttributionViewModelProperties): AttributionViewModel;
  }

  export const AttributionViewModel: AttributionViewModelConstructor;

  interface AttributionViewModelProperties {
    /**
     * The view from which the view model will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution-AttributionViewModel.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
  }

  /**
   * The following properties define an attribution item that contains the attribution text for a layer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution-AttributionViewModel.html#AttributionItem)
   */
  export interface AttributionItem extends Object {
    /**
     * The attribution text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution-AttributionViewModel.html#AttributionItem)
     */
    text: string;
    /**
     * The layer that has the attribution text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution-AttributionViewModel.html#AttributionItem)
     */
    layer: Layer;
  }

  interface BasemapGallery extends Widget {
    /**
     * The map's [basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html#activeBasemap)
     */
    activeBasemap: Basemap;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html#iconClass)
     */
    iconClass: string;
    /**
     * The source for basemaps that the widget will display.This property can be autocast with an array or [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html)s,a [Portal](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html) instance, or a URL to a portal instance.The default source is a [PortalBasemapsSource](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-PortalBasemapsSource.html) that points tothe default portal instance set in [esriConfig.portalUrl](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#portalUrl).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html#source)
     */
    source: LocalBasemapsSource | PortalBasemapsSource;
    /**
     * The view from which the widget will operate. This viewprovides access to the active[basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap)via the view's [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#map) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[BasemapGalleryViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html#viewModel)
     */
    viewModel: BasemapGalleryViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html#render)
     *
     *
     */
    render(): any;
  }

  interface BasemapGalleryConstructor {
    new (properties?: BasemapGalleryProperties): BasemapGallery;
  }

  export const BasemapGallery: BasemapGalleryConstructor;

  interface BasemapGalleryProperties extends WidgetProperties {
    /**
     * The map's [basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html#activeBasemap)
     */
    activeBasemap?: BasemapProperties;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html#iconClass)
     */
    iconClass?: string;
    /**
     * The source for basemaps that the widget will display.This property can be autocast with an array or [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html)s,a [Portal](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html) instance, or a URL to a portal instance.The default source is a [PortalBasemapsSource](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-PortalBasemapsSource.html) that points tothe default portal instance set in [esriConfig.portalUrl](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#portalUrl).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html#source)
     */
    source?: LocalBasemapsSourceProperties | PortalBasemapsSourceProperties;
    /**
     * The view from which the widget will operate. This viewprovides access to the active[basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap)via the view's [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#map) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[BasemapGalleryViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html#viewModel)
     */
    viewModel?: BasemapGalleryViewModelProperties;
  }

  interface BasemapGalleryViewModel extends Accessor {
    /**
     * The map's [basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html#activeBasemap)
     */
    activeBasemap: Basemap;
    /**
     * A collection of [BasemapGalleryItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-BasemapGalleryItem.html)s representing basemaps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html#items)
     */
    items: Collection<BasemapGalleryItem>;
    /**
     * The source for basemaps that the widget will display.This property can be autocast with an array or [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html)s,a [Portal](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html) instance or a URL to a portal instance.The default source is a [PortalBasemapsSource](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-PortalBasemapsSource.html) that points tothe default portal instance set in [esriConfig.portalUrl](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#portalUrl).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html#source)
     */
    source: LocalBasemapsSource | PortalBasemapsSource;
    /**
     * The view model's state.**Possible Values:** ready | disabled
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * The view from which the widget will operate. This viewprovides access to the active[basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap)via the view's [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#map) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html#view)
     */
    view: MapView | SceneView;

    /**
     * A convenience function to check basemap equality.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html#basemapEquals)
     *
     * @param basemap1 The basemap to compare against `basemap2`.
     * @param basemap2 The basemap to compare against `basemap1`.
     *
     */
    basemapEquals(basemap1: Basemap, basemap2: Basemap): boolean;
  }

  interface BasemapGalleryViewModelConstructor {
    new (properties?: BasemapGalleryViewModelProperties): BasemapGalleryViewModel;
  }

  export const BasemapGalleryViewModel: BasemapGalleryViewModelConstructor;

  interface BasemapGalleryViewModelProperties {
    /**
     * The map's [basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html#activeBasemap)
     */
    activeBasemap?: BasemapProperties;
    /**
     * A collection of [BasemapGalleryItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-BasemapGalleryItem.html)s representing basemaps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html#items)
     */
    items?: CollectionProperties<BasemapGalleryItemProperties>;
    /**
     * The source for basemaps that the widget will display.This property can be autocast with an array or [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html)s,a [Portal](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html) instance or a URL to a portal instance.The default source is a [PortalBasemapsSource](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-PortalBasemapsSource.html) that points tothe default portal instance set in [esriConfig.portalUrl](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#portalUrl).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html#source)
     */
    source?: LocalBasemapsSourceProperties | PortalBasemapsSourceProperties;
    /**
     * The view from which the widget will operate. This viewprovides access to the active[basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap)via the view's [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#map) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
  }

  interface BasemapGalleryItem extends Accessor {
    /**
     * The item's associated basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-BasemapGalleryItem.html#basemap)
     */
    basemap: Basemap;
    /**
     * The Error object returned if an error occurred.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-BasemapGalleryItem.html#error)
     */
    readonly error: Error;
    /**
     * The item's state.**Possible Values:** loading | ready | error
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-BasemapGalleryItem.html#state)
     *
     * @default loading
     */
    readonly state: string;
    /**
     * The view associated with this item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-BasemapGalleryItem.html#view)
     */
    view: MapView | SceneView;
  }

  interface BasemapGalleryItemConstructor {
    new (properties?: BasemapGalleryItemProperties): BasemapGalleryItem;
  }

  export const BasemapGalleryItem: BasemapGalleryItemConstructor;

  interface BasemapGalleryItemProperties {
    /**
     * The item's associated basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-BasemapGalleryItem.html#basemap)
     */
    basemap?: BasemapProperties;
    /**
     * The view associated with this item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-BasemapGalleryItem.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
  }

  interface LocalBasemapsSource extends Accessor {
    /**
     * A collection of [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html)s.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-LocalBasemapsSource.html#basemaps)
     */
    basemaps: Collection<Basemap>;
    /**
     * The source's state. The state is always `ready`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-LocalBasemapsSource.html#state)
     */
    readonly state: string;

    /**
     * Refreshes the source basemaps.Note: `refresh` will not affect LocalBasemapsSource.Modify basemaps directly instead.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-LocalBasemapsSource.html#refresh)
     *
     *
     */
    refresh(): void;
  }

  interface LocalBasemapsSourceConstructor {
    new (properties?: LocalBasemapsSourceProperties): LocalBasemapsSource;
  }

  export const LocalBasemapsSource: LocalBasemapsSourceConstructor;

  interface LocalBasemapsSourceProperties {
    /**
     * A collection of [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html)s.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-LocalBasemapsSource.html#basemaps)
     */
    basemaps?: CollectionProperties<BasemapProperties>;
  }

  interface PortalBasemapsSource extends LocalBasemapsSource {
    /**
     * Function used to filter basemaps after being fetched from the Portal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-PortalBasemapsSource.html#filterFunction)
     */
    filterFunction: Function;
    /**
     * The Portal from which to fetch basemaps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-PortalBasemapsSource.html#portal)
     */
    portal: Portal;
    /**
     * An object with key-value pairs used to create a custom basemap gallery group query.Note that all parameters will be joined using the `AND` operator.A query string can also be provided for more advanced use cases.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-PortalBasemapsSource.html#query)
     */
    query: any | string;
    /**
     * Callback for updating basemaps after being fetched and filtered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-PortalBasemapsSource.html#updateBasemapsCallback)
     */
    updateBasemapsCallback: Function;
  }

  interface PortalBasemapsSourceConstructor {
    new (properties?: PortalBasemapsSourceProperties): PortalBasemapsSource;
  }

  export const PortalBasemapsSource: PortalBasemapsSourceConstructor;

  interface PortalBasemapsSourceProperties extends LocalBasemapsSourceProperties {
    /**
     * Function used to filter basemaps after being fetched from the Portal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-PortalBasemapsSource.html#filterFunction)
     */
    filterFunction?: Function;
    /**
     * The Portal from which to fetch basemaps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-PortalBasemapsSource.html#portal)
     */
    portal?: PortalProperties;
    /**
     * An object with key-value pairs used to create a custom basemap gallery group query.Note that all parameters will be joined using the `AND` operator.A query string can also be provided for more advanced use cases.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-PortalBasemapsSource.html#query)
     */
    query?: any | string;
    /**
     * Callback for updating basemaps after being fetched and filtered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-PortalBasemapsSource.html#updateBasemapsCallback)
     */
    updateBasemapsCallback?: Function;
  }

  interface BasemapToggle extends Widget {
    /**
     * The map's [basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#activeBasemap)
     */
    readonly activeBasemap: Basemap;
    /**
     * The next basemap for toggling. One of the following values may be set to this property:* The [string ID](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) of any Esri basemap.* A custom [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html) object. Since this property may be[autocast](https://developers.arcgis.com/javascript/latest/guide/autocasting/index.html), the [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html)module does not need to be included in the `require()` function in most applications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#nextBasemap)
     */
    nextBasemap: Basemap;
    /**
     * Indicates if the title of the basemap is visible in the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#titleVisible)
     *
     * @default false
     */
    titleVisible: boolean;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). This viewprovides the BasemapToggle widget with access to the initial[basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) to toggle fromvia the view's [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#map) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[BasemapToggleViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle-BasemapToggleViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#viewModel)
     */
    viewModel: BasemapToggleViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#render)
     *
     *
     */
    render(): any;
    /**
     * Toggles to the [next basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#nextBasemap).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#toggle)
     *
     *
     */
    toggle(): void;
  }

  interface BasemapToggleConstructor {
    new (properties?: BasemapToggleProperties): BasemapToggle;
  }

  export const BasemapToggle: BasemapToggleConstructor;

  interface BasemapToggleProperties extends WidgetProperties {
    /**
     * The next basemap for toggling. One of the following values may be set to this property:* The [string ID](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) of any Esri basemap.* A custom [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html) object. Since this property may be[autocast](https://developers.arcgis.com/javascript/latest/guide/autocasting/index.html), the [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html)module does not need to be included in the `require()` function in most applications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#nextBasemap)
     */
    nextBasemap?: BasemapProperties | string;
    /**
     * Indicates if the title of the basemap is visible in the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#titleVisible)
     *
     * @default false
     */
    titleVisible?: boolean;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). This viewprovides the BasemapToggle widget with access to the initial[basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) to toggle fromvia the view's [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#map) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[BasemapToggleViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle-BasemapToggleViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#viewModel)
     */
    viewModel?: BasemapToggleViewModelProperties;
  }

  interface BasemapToggleViewModel extends Accessor, Evented {
    /**
     * The map's [basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle-BasemapToggleViewModel.html#activeBasemap)
     */
    readonly activeBasemap: Basemap;
    /**
     * The next basemap for toggling. One of the following values may be set to this property:* The [string ID](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) of any Esri basemap.* A custom [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html) object. Since this property may be[autocast](https://developers.arcgis.com/javascript/latest/guide/autocasting/index.html), the [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html)module does not need to be included in the `require()` function in most applications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle-BasemapToggleViewModel.html#nextBasemap)
     */
    nextBasemap: Basemap;
    /**
     * The view model's state.**Possible Values:** ready | disabled
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle-BasemapToggleViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * The view from which the widget will operate. This viewprovides access to the initial[basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) to toggle fromvia the view's [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#map) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle-BasemapToggleViewModel.html#view)
     */
    view: MapView | SceneView;

    /**
     * Toggles to the [next basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle-BasemapToggleViewModel.html#nextBasemap).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle-BasemapToggleViewModel.html#toggle)
     *
     *
     */
    toggle(): void;
  }

  interface BasemapToggleViewModelConstructor {
    new (properties?: BasemapToggleViewModelProperties): BasemapToggleViewModel;

    /**
     * Helper method to find a basemap's thumbnail URL.If the basemap does not have a thumbnail URL defined, this utility will try to find a thumbnail URL from the best matching well-known basemap.If no match is found, a thumbnail URL from the basemap's base layers will be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle-BasemapToggleViewModel.html#getThumbnailUrl)
     *
     * @param basemap The basemap used to retrieve the thumbnail URL.
     *
     */
    getThumbnailUrl(basemap: Basemap): string;
  }

  export const BasemapToggleViewModel: BasemapToggleViewModelConstructor;

  interface BasemapToggleViewModelProperties {
    /**
     * The next basemap for toggling. One of the following values may be set to this property:* The [string ID](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) of any Esri basemap.* A custom [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html) object. Since this property may be[autocast](https://developers.arcgis.com/javascript/latest/guide/autocasting/index.html), the [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html)module does not need to be included in the `require()` function in most applications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle-BasemapToggleViewModel.html#nextBasemap)
     */
    nextBasemap?: BasemapProperties | string;
    /**
     * The view from which the widget will operate. This viewprovides access to the initial[basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap) to toggle fromvia the view's [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#map) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle-BasemapToggleViewModel.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
  }

  interface Bookmarks extends Widget, GoTo {
    /**
     * A collection of [Bookmark](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-Bookmark.html)s.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#bookmarks)
     */
    bookmarks: Collection<Bookmark>;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#iconClass)
     */
    iconClass: string;
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#view)
     */
    view: MapView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[BookmarksViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#viewModel)
     */
    viewModel: BookmarksViewModel;

    /**
     * Zoom to a specific bookmark.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#goTo)
     *
     * @param Bookmark The bookmark to zoom to.
     *
     */
    goTo(Bookmark: Bookmark): IPromise<any>;
    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#render)
     *
     *
     */
    render(): any;
  }

  interface BookmarksConstructor {
    new (properties?: BookmarksProperties): Bookmarks;
  }

  export const Bookmarks: BookmarksConstructor;

  interface BookmarksProperties extends WidgetProperties, GoToProperties {
    /**
     * A collection of [Bookmark](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-Bookmark.html)s.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#bookmarks)
     */
    bookmarks?: CollectionProperties<BookmarkProperties>;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#iconClass)
     */
    iconClass?: string;
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#view)
     */
    view?: MapViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[BookmarksViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#viewModel)
     */
    viewModel?: BookmarksViewModelProperties;
  }

  interface BookmarksViewModel extends Accessor, GoTo {
    /**
     * The [Bookmark](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-Bookmark.html) that is being navigated to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#activeBookmark)
     */
    readonly activeBookmark: Bookmark;
    /**
     * A collection of [Bookmark](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-Bookmark.html)s.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#bookmarks)
     */
    bookmarks: Collection<Bookmark>;
    /**
     * The view model's state.**Possible Values:** loading | disabled
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#view)
     */
    view: MapView;

    /**
     * Zoom to a specific bookmark.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#goTo)
     *
     * @param Bookmark The bookmark to zoom to.
     *
     */
    goTo(Bookmark: Bookmark): IPromise<any>;
  }

  interface BookmarksViewModelConstructor {
    new (properties?: BookmarksViewModelProperties): BookmarksViewModel;
  }

  export const BookmarksViewModel: BookmarksViewModelConstructor;

  interface BookmarksViewModelProperties extends GoToProperties {
    /**
     * A collection of [Bookmark](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-Bookmark.html)s.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#bookmarks)
     */
    bookmarks?: CollectionProperties<BookmarkProperties>;
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#view)
     */
    view?: MapViewProperties;
  }

  interface Compass extends Widget, GoTo {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass.html#iconClass)
     */
    iconClass: string;
    /**
     * The view in which the Compass obtains and indicates camera[heading](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#heading), using a (SceneView) orrotation (MapView).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[CompassViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass-CompassViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass.html#viewModel)
     */
    viewModel: CompassViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass.html#render)
     *
     *
     */
    render(): any;
    /**
     * If working in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html), sets the view's[rotation](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#rotation) to `0`. If working in a[SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html), sets the camera's[heading](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#heading) to `0`. This method is executed eachtime the [Compass](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass.html) is clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass.html#reset)
     *
     *
     */
    reset(): void;
  }

  interface CompassConstructor {
    new (properties?: CompassProperties): Compass;
  }

  export const Compass: CompassConstructor;

  interface CompassProperties extends WidgetProperties, GoToProperties {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass.html#iconClass)
     */
    iconClass?: string;
    /**
     * The view in which the Compass obtains and indicates camera[heading](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#heading), using a (SceneView) orrotation (MapView).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[CompassViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass-CompassViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass.html#viewModel)
     */
    viewModel?: CompassViewModelProperties;
  }

  interface CompassViewModel extends Accessor, GoTo {
    /**
     * The orientation axes (x, y, z).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass-CompassViewModel.html#orientation)
     *
     * @default { x: 0, y: 0, z: 0 }
     */
    orientation: any;
    /**
     * The view model's state.**Possible Values:** compass | rotation | disabled
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass-CompassViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * The view in which the Compass obtains and indicates camera[heading](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#heading), using a (SceneView) orrotation (MapView).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass-CompassViewModel.html#view)
     */
    view: MapView | SceneView;

    /**
     * If working in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html), sets the view's[rotation](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#rotation) is to `0`. If working in a[SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html), sets the camera's[heading](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#heading) to `0`.This method is executed each time the [Compass](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass.html) is clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass-CompassViewModel.html#reset)
     *
     *
     */
    reset(): void;
  }

  interface CompassViewModelConstructor {
    new (properties?: CompassViewModelProperties): CompassViewModel;
  }

  export const CompassViewModel: CompassViewModelConstructor;

  interface CompassViewModelProperties extends GoToProperties {
    /**
     * The orientation axes (x, y, z).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass-CompassViewModel.html#orientation)
     *
     * @default { x: 0, y: 0, z: 0 }
     */
    orientation?: any;
    /**
     * The view in which the Compass obtains and indicates camera[heading](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#heading), using a (SceneView) orrotation (MapView).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass-CompassViewModel.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
  }

  interface CoordinateConversion extends Widget, GoTo {
    /**
     * A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) containing every [Conversion](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Conversion.html)that the widget is currently displaying.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#conversions)
     */
    conversions: Collection<Conversion>;
    /**
     * Describes the location of the coordinates currently displayed by the widget as a [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html).Setting this property will update all [conversions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#conversions).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#currentLocation)
     */
    currentLocation: Point;
    /**
     * A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) containing every [Format](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html)that the widget is capable of displaying.The default formats are `basemap`, `dd`, `ddm`, `dms`, `mgrs`, `usng`, `utm`, and `xy`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#formats)
     */
    formats: Collection<Format>;
    /**
     * Describes the current mode of the widget.**Possible Values:** live | capture* While in `live` mode, the widget will update as the cursor moves.* While in `capture` mode, the widget will update on mouse click and display a graphicmarking the current location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#mode)
     *
     * @default live
     */
    mode: string;
    /**
     * If this property is set to `true`, multiple conversions can be displayed.  For a simpler experience with onlyone conversion at a time, this property can be set to `false`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#multipleConversions)
     *
     * @default true
     */
    multipleConversions: boolean;
    /**
     * Determines whether the widget should expand up or down.  If set to `auto`the widget will be oriented based on its position in the view.**Possible Values:** auto | expand-up | expand-down
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#orientation)
     *
     * @default auto
     */
    orientation: string;
    /**
     * The number of milliseconds of delay before conversion requests will be sentto the [GeometryService](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html).  This only affects conversions that cannot beperformed in the browser.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#requestDelay)
     *
     * @default 300
     */
    requestDelay: number;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget. The view model contains the logic that controls the Coordinate Widget's behavior.  See the[CoordinateConversionViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html) class to access all properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#viewModel)
     */
    viewModel: CoordinateConversionViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#render)
     *
     *
     */
    render(): any;
    /**
     * Attempt to convert a string into a [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html).  The format of thestring must be specified.  A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of available formats can beobtained from the [formats](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#formats) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#reverseConvert)
     *
     * @param coordinate The coordinate string.
     * @param format Specifies the format of the input coordinate.
     *
     */
    reverseConvert(coordinate: string, format: Format): IPromise<Point>;
  }

  interface CoordinateConversionConstructor {
    new (properties?: CoordinateConversionProperties): CoordinateConversion;
  }

  export const CoordinateConversion: CoordinateConversionConstructor;

  interface CoordinateConversionProperties extends WidgetProperties, GoToProperties {
    /**
     * A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) containing every [Conversion](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Conversion.html)that the widget is currently displaying.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#conversions)
     */
    conversions?: CollectionProperties<Conversion>;
    /**
     * Describes the location of the coordinates currently displayed by the widget as a [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html).Setting this property will update all [conversions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#conversions).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#currentLocation)
     */
    currentLocation?: PointProperties;
    /**
     * A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) containing every [Format](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html)that the widget is capable of displaying.The default formats are `basemap`, `dd`, `ddm`, `dms`, `mgrs`, `usng`, `utm`, and `xy`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#formats)
     */
    formats?: CollectionProperties<Format>;
    /**
     * Describes the current mode of the widget.**Possible Values:** live | capture* While in `live` mode, the widget will update as the cursor moves.* While in `capture` mode, the widget will update on mouse click and display a graphicmarking the current location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#mode)
     *
     * @default live
     */
    mode?: string;
    /**
     * If this property is set to `true`, multiple conversions can be displayed.  For a simpler experience with onlyone conversion at a time, this property can be set to `false`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#multipleConversions)
     *
     * @default true
     */
    multipleConversions?: boolean;
    /**
     * Determines whether the widget should expand up or down.  If set to `auto`the widget will be oriented based on its position in the view.**Possible Values:** auto | expand-up | expand-down
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#orientation)
     *
     * @default auto
     */
    orientation?: string;
    /**
     * The number of milliseconds of delay before conversion requests will be sentto the [GeometryService](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html).  This only affects conversions that cannot beperformed in the browser.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#requestDelay)
     *
     * @default 300
     */
    requestDelay?: number;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * The view model for this widget. The view model contains the logic that controls the Coordinate Widget's behavior.  See the[CoordinateConversionViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html) class to access all properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#viewModel)
     */
    viewModel?: CoordinateConversionViewModelProperties;
  }

  interface CoordinateConversionViewModel extends Accessor, GoTo {
    /**
     * A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) containing every [Conversion](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Conversion.html)that the widget is currently displaying.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#conversions)
     */
    conversions: Collection<Conversion>;
    /**
     * Describes the location of the coordinates currently displayed by the widget as a [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html).Setting this property will update all [conversions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#conversions).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#currentLocation)
     */
    currentLocation: Point;
    /**
     * A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) containing every [Format](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html)that the widget is capable of displaying.The default formats are `basemap`, `dd`, `ddm`, `dms`, `mgrs`, `usng`, `utm`, and `xy`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#formats)
     */
    formats: Collection<Format>;
    /**
     * This symbol is used to visualize the location currently described by the widget when `capture` modeis active.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#locationSymbol)
     */
    locationSymbol: SimpleMarkerSymbol | PictureMarkerSymbol;
    /**
     * Describes the current mode of the widget.**Possible Values:** live | capture* While in `live` mode, the widget will update as the cursor moves.* While in `capture` mode, the widget will update on mouse click and display a graphicmarking the current location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#mode)
     *
     * @default live
     */
    mode: string;
    /**
     * The number of milliseconds of delay before conversion requests will be sentto the [GeometryService](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html).  This only affects conversions that cannot beperformed in the browser.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#requestDelay)
     *
     * @default 300
     */
    requestDelay: number;
    /**
     * The view model's state.**Possible Values:** ready | loading | disabled
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#view)
     */
    view: MapView | SceneView;

    /**
     * Attempt to convert a point into a [Position](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#Position).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#convert)
     *
     * @param point The point to convert.
     * @param format The format that describes how the point should be converted.
     *
     */
    convert(point: Point, format: Format): IPromise<Position>;
    /**
     * Attempt to convert a string into a [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html).  The format of thestring must be specified.  A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of available formats can beobtained from the [formats](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#formats) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#reverseConvert)
     *
     * @param coordinate The coordinate string.
     * @param format Specifies the format of the input coordinate.
     *
     */
    reverseConvert(coordinate: string, format: Format): IPromise<Point>;
    /**
     * Update the input conversions based on the input point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#updateConversions)
     *
     * @param location A point that will be used to update each input conversion.
     * @param conversions An array of [Conversions](esri-widgets-CoordinateConversion-support-Conversion.html)to be updated.
     *
     */
    updateConversions(location: Point, conversions: Conversion[]): IPromise<Conversion[]>;
  }

  interface CoordinateConversionViewModelConstructor {
    new (properties?: CoordinateConversionViewModelProperties): CoordinateConversionViewModel;
  }

  export const CoordinateConversionViewModel: CoordinateConversionViewModelConstructor;

  interface CoordinateConversionViewModelProperties extends GoToProperties {
    /**
     * A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) containing every [Conversion](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Conversion.html)that the widget is currently displaying.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#conversions)
     */
    conversions?: CollectionProperties<Conversion>;
    /**
     * Describes the location of the coordinates currently displayed by the widget as a [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html).Setting this property will update all [conversions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#conversions).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#currentLocation)
     */
    currentLocation?: PointProperties;
    /**
     * A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) containing every [Format](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html)that the widget is capable of displaying.The default formats are `basemap`, `dd`, `ddm`, `dms`, `mgrs`, `usng`, `utm`, and `xy`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#formats)
     */
    formats?: CollectionProperties<Format>;
    /**
     * This symbol is used to visualize the location currently described by the widget when `capture` modeis active.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#locationSymbol)
     */
    locationSymbol?: SimpleMarkerSymbolProperties | PictureMarkerSymbolProperties;
    /**
     * Describes the current mode of the widget.**Possible Values:** live | capture* While in `live` mode, the widget will update as the cursor moves.* While in `capture` mode, the widget will update on mouse click and display a graphicmarking the current location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#mode)
     *
     * @default live
     */
    mode?: string;
    /**
     * The number of milliseconds of delay before conversion requests will be sentto the [GeometryService](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html).  This only affects conversions that cannot beperformed in the browser.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#requestDelay)
     *
     * @default 300
     */
    requestDelay?: number;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
  }

  /**
   * Describes a point in terms of a location, a [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html), and a coordinate, a string.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#Position)
   */
  export interface Position extends Object {
    /**
     * A point geometry representing the location described by the conversion.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#Position)
     */
    location: Point;
    /**
     * A string representing the location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#Position)
     */
    coordinate: string;
  }

  interface Conversion {
    /**
     * A formatted string based on the current [position](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Conversion.html#position) and display information on the [format](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Conversion.html#format).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Conversion.html#displayCoordinate)
     */
    readonly displayCoordinate: string;
    /**
     * The [Format](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html) for this conversion.  The Format contains informationdetailing how the Conversion should be performed and how it will be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Conversion.html#format)
     */
    format: Format;
    /**
     * The position property contains the location information for this conversion.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Conversion.html#position)
     */
    position: ConversionPosition;
  }

  export const Conversion: Conversion;

  /**
   * Describes a point in terms of a location, a [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html), and a coordinate, a string.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Conversion.html#Position)
   */
  export interface ConversionPosition extends Object {
    /**
     * A point geometry representing the location described by the conversion.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Conversion.html#Position)
     */
    location: Point;
    /**
     * A string representing the location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Conversion.html#Position)
     */
    coordinate: string;
  }

  interface Format {
    /**
     * Contains information that describes how this Format should be converted.  This property should only beset when creating a custom Format.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#conversionInfo)
     *
     * @default null
     */
    conversionInfo: ConversionInfo;
    /**
     * A array of [Coordinate Segments](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#CoordinateSegment).  Each segment represents a section of the Format'scoordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#coordinateSegments)
     *
     * @default null
     */
    coordinateSegments: CoordinateSegment[];
    /**
     * A string that serves as a pattern describing how this Format should be displayed.  The pattern shouldcontain all of aliases specified by the Format's [coordinateSegments property](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#coordinateSegments).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#currentPattern)
     *
     * @default null
     */
    currentPattern: string;
    /**
     * The default pattern describing how this Format should be displayed.  See [currentPattern](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#currentPattern).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#defaultPattern)
     *
     * @default null
     */
    defaultPattern: string;
    /**
     * The name of the coordinate.  A [CoordinateConversion](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html)widget should not contain multiple Formats with the same name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#name)
     *
     * @default null
     */
    name: string;
    /**
     * The [SpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html) for this format.  Coordinates generated for a formatwill be derived from points in this spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#spatialReference)
     */
    spatialReference: SpatialReference;
    /**
     * The view model of the [CoordinateConversion](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html) widget that is utilizing this format.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#viewModel)
     */
    viewModel: CoordinateConversionViewModel;
  }

  export const Format: Format;

  /**
   * This object describes how a Format should be projected and formatted for display.  Used to definecustom Formats that require custom conversion and/or projection logic.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#ConversionInfo)
   */
  export interface ConversionInfo extends Object {
    /**
     * A function that takes a point and returns a [position](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#Position).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#ConversionInfo)
     *
     *
     */
    convert(): void;
    /**
     * A function that takes a string and returns a Point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#ConversionInfo)
     *
     *
     */
    reverseConvert(): void;
  }

  /**
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#CoordinateSegment)
   */
  export interface CoordinateSegment extends Object {
    /**
     * A string that provides the name for this segment of a coordinate string.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#CoordinateSegment)
     */
    alias: string;
    /**
     * A string that describes the role of this segment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#CoordinateSegment)
     */
    description: string;
    /**
     * A regular expression that should extract this segment from the complete coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#CoordinateSegment)
     */
    searchPattern: RegExp;
  }

  /**
   * Describes a point in terms of a location, a [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html), and a coordinate, a string.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#Position)
   */
  export interface FormatPosition extends Object {
    /**
     * A point geometry representing the location described by the conversion.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#Position)
     */
    location: Point;
    /**
     * A string representing the location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#Position)
     */
    coordinate: string;
  }

  interface Directions extends Widget, GoTo {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#iconClass)
     */
    iconClass: string;
    /**
     * The most recent route result. Returns an object containing properties for any barriers used when generating the route, messagesthat may arise when solving the route, and finally an array of returned [RouteResults](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#lastRoute)
     *
     * @default null
     */
    readonly lastRoute: DirectionsLastRoute;
    /**
     * The maximum number of stops allowed for routing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#maxStops)
     *
     * @default 50
     */
    maxStops: number;
    /**
     * The URL of the REST endpoint of the Route service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#routeServiceUrl)
     *
     * @default "https://route.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World"
     */
    routeServiceUrl: string;
    /**
     * Defines the symbol used to draw the route on the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#routeSymbol)
     */
    routeSymbol: SimpleLineSymbol;
    /**
     * Controls the default properties used when [searching](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html).Note that the default `searchProperties` differ slightly fromthe [Search widget](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#searchProperties)
     *
     * @default null
     */
    searchProperties: DirectionsSearchProperties;
    /**
     * The default stop symbols used to display locations between the origin and final destination.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#stopSymbols)
     */
    stopSymbols: DirectionsStopSymbols;
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[DirectionsViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#viewModel)
     */
    viewModel: DirectionsViewModel;

    /**
     * Calculate the route to the input locations and display the list of directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#getDirections)
     *
     *
     */
    getDirections(): IPromise<RouteResult>;
    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#render)
     *
     *
     */
    render(): any;
    /**
     * Zoom so that the full route is displayed within the current map extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#zoomToRoute)
     *
     *
     */
    zoomToRoute(): void;
  }

  interface DirectionsConstructor {
    new (properties?: DirectionsProperties): Directions;
  }

  export const Directions: DirectionsConstructor;

  interface DirectionsProperties extends WidgetProperties, GoToProperties {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#iconClass)
     */
    iconClass?: string;
    /**
     * The maximum number of stops allowed for routing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#maxStops)
     *
     * @default 50
     */
    maxStops?: number;
    /**
     * The URL of the REST endpoint of the Route service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#routeServiceUrl)
     *
     * @default "https://route.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World"
     */
    routeServiceUrl?: string;
    /**
     * Defines the symbol used to draw the route on the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#routeSymbol)
     */
    routeSymbol?: SimpleLineSymbolProperties;
    /**
     * Controls the default properties used when [searching](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html).Note that the default `searchProperties` differ slightly fromthe [Search widget](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#searchProperties)
     *
     * @default null
     */
    searchProperties?: DirectionsSearchProperties;
    /**
     * The default stop symbols used to display locations between the origin and final destination.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#stopSymbols)
     */
    stopSymbols?: DirectionsStopSymbols;
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[DirectionsViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#viewModel)
     */
    viewModel?: DirectionsViewModelProperties;
  }

  interface DirectionsViewModel extends Accessor, GoTo {
    /**
     * The network attribute name to be used as the impedance attribute in the analysis. Thedefault is as defined in the specific routing network layer used in your[RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html). You can specify any attribute names listed in theService Directory under `Network Dataset -> Network Attributes` as `Usage Type: esriNAUTCost`.You can also specify a value of `none` to indicate that no network attributes shouldbe used for impedance. If you specify an empty array, it will default to the default of the service.For example, set `impedanceAttribute = "Time"` for the quickest route and`impedanceAttribute = "Length"` for shortest drive, assuming the service hasthose two esriNAUTCost attributes.For more information, see [Understanding the network attribute](http://resources.arcgis.com/en/help/main/10.2/index.html#//00470000000m000000).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#impedanceAttribute)
     */
    impedanceAttribute: string;
    /**
     * The most recent route result. Returns an object containing properties for any barriers used when generating the route, messagesthat may arise when solving the route, and finally an array of returned [RouteResults](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#lastRoute)
     *
     * @default null
     */
    readonly lastRoute: DirectionsViewModelLastRoute;
    /**
     * The maximum number of stops allowed for routing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#maxStops)
     *
     * @default 50
     */
    maxStops: number;
    /**
     * Route Parameters object used to call the service.Please refer to the [RouteParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html)documentation for the list of available settings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#routeParameters)
     */
    routeParameters: RouteParameters;
    /**
     * The URL of the REST endpoint of the Route service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#routeServiceUrl)
     *
     * @default "https://route.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World"
     */
    routeServiceUrl: string;
    /**
     * Defines the symbol used to draw the route on the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#routeSymbol)
     */
    routeSymbol: SimpleLineSymbol;
    /**
     * The selected travel mode.More information can be found in the [ArcGIS Online documentation](https://doc.arcgis.com/en/arcgis-online/reference/travel-modes.htm#GUID-96DF7F50-E0B2-4BF3-8271-EB515D3F0107).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#selectedTravelMode)
     *
     * @default null | 'Driving Time'
     */
    selectedTravelMode: DirectionsViewModelSelectedTravelMode;
    /**
     * The Service Description object returned by the Route REST Endpoint. This object contains service specificdetails like available Cost attributes, supported Restrictions, default Attribute Parameter Values,Service Limits (like maximum input stop count), default Impedance Attribute, etc. This information isuseful when implementing complex logistics scenarios operating with limitations or preferences on vehicleor stop properties, for example avoiding toll roads, dealing with hazardous materials, working withstop service times, etc.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#serviceDescription)
     *
     * @default null
     */
    readonly serviceDescription: any;
    /**
     * The current state of the view model.**Possible Values:** disabled | ready
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * An array of graphics that define the stop locations along the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#stops)
     */
    stops: Collection<Graphic>;
    /**
     * The default stop symbols used to display locations between the origin and final destination.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#stopSymbols)
     */
    stopSymbols: DirectionsViewModelStopSymbols;
    /**
     * The name of the network attribute to use for the drive time when computing directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#timeAttribute)
     */
    timeAttribute: DirectionsViewModelTimeAttribute;
    /**
     * Array of objects containing properties specific to either an ArcGIS service or organization's travel modes.More information can be found in the [ArcGIS Online documentation](https://doc.arcgis.com/en/arcgis-online/reference/travel-modes.htm#GUID-96DF7F50-E0B2-4BF3-8271-EB515D3F0107).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#travelModes)
     */
    readonly travelModes: TravelMode[];
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#view)
     */
    view: MapView | SceneView;

    /**
     * Centers the map at the specified maneuver or stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#centerAt)
     *
     * @param stopOrManeuver The stop or maneuver where the map should be centered.
     *
     */
    centerAt(stopOrManeuver: Graphic): void;
    /**
     * Clears any highlighted route segments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#clearHighlights)
     *
     *
     */
    clearHighlights(): void;
    /**
     * Removes the route directions from the directions list, leaving the inputs untouched. The route and locations persist on the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#clearResults)
     *
     *
     */
    clearResults(): void;
    /**
     * Returns cost attribute name specific to a particular route service. This can be used as a [travel mode impedance](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#TravelMode).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#getCostAttribute)
     *
     * @param attributeName The attribute name specifying the cost attribute used as an impedance.
     *
     */
    getCostAttribute(attributeName: string): string;
    /**
     * Calculate the route to the input locations and display the list of directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#getDirections)
     *
     *
     */
    getDirections(): IPromise<RouteResult>;
    /**
     * Highlights the specified route segment on the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#highlightSegment)
     *
     * @param maneuver The route segment to highlight.
     *
     */
    highlightSegment(maneuver: Graphic): void;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#load)
     *
     *
     */
    load(): IPromise<any>;
    /**
     * Resets the state of the ViewModel, clearing off all the input stops, and results in the widget. The results persist in the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#reset)
     *
     *
     */
    reset(): void;
    /**
     * Zoom so that the full route is displayed within the current map extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#zoomToRoute)
     *
     *
     */
    zoomToRoute(): void;
  }

  interface DirectionsViewModelConstructor {
    new (properties?: DirectionsViewModelProperties): DirectionsViewModel;
  }

  export const DirectionsViewModel: DirectionsViewModelConstructor;

  interface DirectionsViewModelProperties extends GoToProperties {
    /**
     * The network attribute name to be used as the impedance attribute in the analysis. Thedefault is as defined in the specific routing network layer used in your[RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html). You can specify any attribute names listed in theService Directory under `Network Dataset -> Network Attributes` as `Usage Type: esriNAUTCost`.You can also specify a value of `none` to indicate that no network attributes shouldbe used for impedance. If you specify an empty array, it will default to the default of the service.For example, set `impedanceAttribute = "Time"` for the quickest route and`impedanceAttribute = "Length"` for shortest drive, assuming the service hasthose two esriNAUTCost attributes.For more information, see [Understanding the network attribute](http://resources.arcgis.com/en/help/main/10.2/index.html#//00470000000m000000).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#impedanceAttribute)
     */
    impedanceAttribute?: string;
    /**
     * The maximum number of stops allowed for routing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#maxStops)
     *
     * @default 50
     */
    maxStops?: number;
    /**
     * Route Parameters object used to call the service.Please refer to the [RouteParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html)documentation for the list of available settings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#routeParameters)
     */
    routeParameters?: RouteParametersProperties;
    /**
     * The URL of the REST endpoint of the Route service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#routeServiceUrl)
     *
     * @default "https://route.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World"
     */
    routeServiceUrl?: string;
    /**
     * Defines the symbol used to draw the route on the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#routeSymbol)
     */
    routeSymbol?: SimpleLineSymbolProperties;
    /**
     * The selected travel mode.More information can be found in the [ArcGIS Online documentation](https://doc.arcgis.com/en/arcgis-online/reference/travel-modes.htm#GUID-96DF7F50-E0B2-4BF3-8271-EB515D3F0107).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#selectedTravelMode)
     *
     * @default null | 'Driving Time'
     */
    selectedTravelMode?: DirectionsViewModelSelectedTravelMode;
    /**
     * An array of graphics that define the stop locations along the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#stops)
     */
    stops?: CollectionProperties<GraphicProperties>;
    /**
     * The default stop symbols used to display locations between the origin and final destination.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#stopSymbols)
     */
    stopSymbols?: DirectionsViewModelStopSymbols;
    /**
     * The name of the network attribute to use for the drive time when computing directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#timeAttribute)
     */
    timeAttribute?: DirectionsViewModelTimeAttribute;
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
  }

  export interface DirectionsViewModelLastRoute extends Object {
    /**
     * Array of graphics representing the point barriers. For a list of properties returned for each barrier,see the [barriers](https://desktop.arcgis.com/en/arcmap/latest/extensions/network-analyst/barriers.htm) help documentation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#lastRoute)
     */
    barriers: Graphic[];
    /**
     * An array of messages serialized to JSON.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#lastRoute)
     */
    messages: DirectionsViewModelLastRouteMessages[];
    /**
     * Array of graphics representing the polygon barriers. For a list of properties returned for each barrier,see the [barriers](https://desktop.arcgis.com/en/arcmap/latest/extensions/network-analyst/barriers.htm) help documentation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#lastRoute)
     */
    polygonBarriers: Graphic[];
    /**
     * Array of graphics representing the polygon barriers. For a list of properties returned for each barrier,see the [barriers](https://desktop.arcgis.com/en/arcmap/latest/extensions/network-analyst/barriers.htm) help documentation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#lastRoute)
     */
    polylineBarriers: Graphic[];
    /**
     * An array of [RouteResults](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#lastRoute)
     */
    routeResults: RouteResult;
  }

  export interface DirectionsViewModelLastRouteMessages extends Object {
    /**
     * A descriptive message of the returned mesage.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#lastRoute)
     */
    description: string;
    /**
     * Number indicating the message type returned from the service. This number correlates to one of thepossible values listed below.Number | Value------|------------0 | informative1 | process-definition2 | process-start3 | process-stop50 | warning100 | error101 | empty200 | abort
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#lastRoute)
     */
    type: number;
  }

  export interface DirectionsViewModelSelectedTravelMode extends TravelMode {
    /**
     * The description explaining the selected travel mode. A listing of these descriptions can be found in the [ArcGIS Online documentation](https://doc.arcgis.com/en/arcgis-online/reference/travel-modes.htm#GUID-96DF7F50-E0B2-4BF3-8271-EB515D3F0107).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#selectedTravelMode)
     */
    description: string;
    /**
     * The unique identifier specific for this travel mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#selectedTravelMode)
     */
    id: string;
    /**
     * The cost attribute on which to optimize the analysis. For example `Miles`, `Minutes`, `Travel Time`, `Kilometers`, `TimeAt1KPH`, `WalkTime`, and `TruckTravelTime`. Take note that attribute names are specificto the network dataset. They may be different if using another Network Analysis service besides the one hosted via ArcGIS Online.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#selectedTravelMode)
     */
    impedanceAttributeName: string;
    /**
     * Name of the travel mode. Users of ArcGIS Online or ArcGIS Enterprise can define custom travel modes inside their Organization settings. Authors of stand alone Network Analysis Services can define their own travel modes inside a network dataset.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#selectedTravelMode)
     */
    name: string;
    /**
     * The time-based cost attribute for reporting directions. For example, `Minutes`, `Travel Time`, `TimeAt1KPH`, `WalkTime`, and `TruckTravelTime`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#selectedTravelMode)
     */
    timeAttributeName: string;
  }

  export interface DirectionsViewModelStopSymbols extends Object {
    /**
     * The first stop symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#stopSymbols)
     */
    first?: Symbol;
    /**
     * The middle stop symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#stopSymbols)
     */
    middle?: Symbol;
    /**
     * The last stop symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#stopSymbols)
     */
    last?: Symbol;
    /**
     * An unlocated stop symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#stopSymbols)
     */
    unlocated?: Symbol;
    /**
     * A waypoint stop symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#stopSymbols)
     */
    waypoint?: Symbol;
  }

  export interface DirectionsViewModelTimeAttribute extends Object {
    /**
     * The name of the network attribute to use for the drive time when computing directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#timeAttribute)
     */
    name: string;
    /**
     * The units to use when calculating drive time for directions.**Possible Values:** feet | kilometers | meters | miles | nautical-miles | yards
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#timeAttribute)
     */
    units?: string;
  }

  /**
   * Array of objects containing properties specific to either an ArcGIS service or organization's travel modes.More information can be found in the [ArcGIS Online documentation](https://doc.arcgis.com/en/arcgis-online/reference/travel-modes.htm#GUID-96DF7F50-E0B2-4BF3-8271-EB515D3F0107).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#TravelMode)
   */
  export interface TravelMode extends Object {
    /**
     * The description explaining the selected travel mode. A listing of these descriptions can be found in the [ArcGIS Online documentation](https://doc.arcgis.com/en/arcgis-online/reference/travel-modes.htm#GUID-96DF7F50-E0B2-4BF3-8271-EB515D3F0107).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#TravelMode)
     */
    description?: string;
    /**
     * The unique identifier specific for this travel mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#TravelMode)
     */
    id?: string;
    /**
     * The cost attribute on which to optimize the analysis. For example `Miles`, `Minutes`, `Travel Time`, `Kilometers`, `TimeAt1KPH`, `WalkTime`, and `TruckTravelTime`. Take note that attribute names are specificto the network dataset. They may be different if using another Network Analysis service besides the one hosted via ArcGIS Online.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#TravelMode)
     */
    impedanceAttributeName?: string;
    /**
     * Name of the travel mode. Users of ArcGIS Online or ArcGIS Enterprise can define custom travel modes inside their Organization settings. Authors of stand alone Network Analysis Services can define their own travel modes inside a network dataset.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#TravelMode)
     */
    name?: string;
    /**
     * The time-based cost attribute for reporting directions. For example, `Minutes`, `Travel Time`, `TimeAt1KPH`, `WalkTime`, and `TruckTravelTime`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#TravelMode)
     */
    timeAttributeName?: string;
  }

  export interface DirectionsLastRoute extends Object {
    /**
     * Array of graphics representing the point barriers. For a list of properties returned for each barrier,see the [barriers](https://desktop.arcgis.com/en/arcmap/latest/extensions/network-analyst/barriers.htm) help documentation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#lastRoute)
     */
    barriers: Graphic[];
    /**
     * An array of messages serialized to JSON.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#lastRoute)
     */
    messages: DirectionsLastRouteMessages[];
    /**
     * Array of graphics representing the polygon barriers. For a list of properties returned for each barrier,see the [barriers](https://desktop.arcgis.com/en/arcmap/latest/extensions/network-analyst/barriers.htm) help documentation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#lastRoute)
     */
    polygonBarriers: Graphic[];
    /**
     * Array of graphics representing the polygon barriers. For a list of properties returned for each barrier,see the [barriers](https://desktop.arcgis.com/en/arcmap/latest/extensions/network-analyst/barriers.htm) help documentation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#lastRoute)
     */
    polylineBarriers: Graphic[];
    /**
     * An array of [RouteResults](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#lastRoute)
     */
    routeResults: RouteResult;
  }

  export interface DirectionsLastRouteMessages extends Object {
    /**
     * A descriptive message of the returned mesage.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#lastRoute)
     */
    description: string;
    /**
     * Number indicating the message type returned from the service. This number correlates to one of thepossible values listed below.Number | Value------|------------0 | informative1 | process-definition2 | process-start3 | process-stop50 | warning100 | error101 | empty200 | abort
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#lastRoute)
     */
    type: number;
  }

  export interface DirectionsStopSymbols extends Object {
    /**
     * The first stop symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#stopSymbols)
     */
    first?: Symbol;
    /**
     * The middle stop symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#stopSymbols)
     */
    middle?: Symbol;
    /**
     * The last stop symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#stopSymbols)
     */
    last?: Symbol;
    /**
     * An unlocated stop symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#stopSymbols)
     */
    unlocated?: Symbol;
    /**
     * A waypoint stop symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#stopSymbols)
     */
    waypoint?: Symbol;
  }

  /**
   * Configurable Search properties of the widget.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
   */
  export interface DirectionsSearchProperties extends Object {
    /**
     * Indicates whether to show the [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) when a result is selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
     */
    popupOpenOnSelect?: boolean;
    /**
     * Number index indicating the current selected source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
     */
    activeSourceIndex?: number;
    /**
     * Indicates whether to automatically navigate to the selected result once selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
     */
    autoNavigate?: boolean;
    /**
     * Indicates whether to automatically select and zoom to the first geocoded result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
     */
    autoSelect?: boolean;
    /**
     * Define the type of location, either `"street"` or `"rooftop"`.The default value will be `"street"` for any locator source that does not define a locationType.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
     */
    locationType?: string;
    /**
     * Indicates the maximum number of search results to return.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
     */
    maxResults?: number;
    /**
     * Indicates the maximum number of suggestions to return for the widget's input.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
     */
    maxSuggestions?: number;
    /**
     * Indicates the minimum number of characters required before querying for a suggestion.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
     */
    minSuggestCharacters?: number;
    /**
     * Indicates whether to display a [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) when a selected result is clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
     */
    popupEnabled?: boolean;
    /**
     * String value used as a hint for input text when searching on multiple sources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
     */
    allPlaceholder?: string;
    /**
     * A customized PopupTemplate for the selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
     */
    popupTemplate?: PopupTemplate;
    /**
     * Indicates whether to show a graphic on the map for the selected source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
     */
    resultGraphicEnabled?: boolean;
    /**
     * Indicates whether to display the option to search all sources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
     */
    searchAllEnabled?: boolean;
    /**
     * The value of the search box input text string.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
     */
    searchTerm?: string;
    /**
     * Specifies the sourcesto search in the [view](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#view).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
     */
    sources?: Collection<LayerSearchSource | LocatorSearchSource>;
    /**
     * Indicates whether to display suggestions as the user enters input text in the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
     */
    suggestionsEnabled?: boolean;
    /**
     * The view of the widget.
     *
     * [Read more...](global.html)
     */
    view?: MapView | SceneView;
    /**
     * The Search widget's view model.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
     */
    viewModel?: SearchViewModel;
  }

  interface DirectLineMeasurement3D extends Widget {
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the distance values.**Possible Values:** metric | imperial | inches | feet | us-feet | yards | miles | nautical-miles | meters | kilometers
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D.html#unit)
     */
    unit: string;
    /**
     * List of unit systems (imperial, metric) and specific units for displaying the distance values.By default, the following units are included: `metric`, `imperial`, `inches`, `feet`, `us-feet`, `yards`, `miles`, `nautical-miles`, `meters`, `kilometers`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D.html#unitOptions)
     */
    unitOptions: string[];
    /**
     * A reference to the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D.html#view)
     */
    view: SceneView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[DirectLineMeasurement3DViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D.html#viewModel)
     */
    viewModel: DirectLineMeasurement3DViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D.html#render)
     *
     *
     */
    render(): any;
  }

  interface DirectLineMeasurement3DConstructor {
    new (properties?: DirectLineMeasurement3DProperties): DirectLineMeasurement3D;
  }

  export const DirectLineMeasurement3D: DirectLineMeasurement3DConstructor;

  interface DirectLineMeasurement3DProperties extends WidgetProperties {
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the distance values.**Possible Values:** metric | imperial | inches | feet | us-feet | yards | miles | nautical-miles | meters | kilometers
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D.html#unit)
     */
    unit?: string;
    /**
     * List of unit systems (imperial, metric) and specific units for displaying the distance values.By default, the following units are included: `metric`, `imperial`, `inches`, `feet`, `us-feet`, `yards`, `miles`, `nautical-miles`, `meters`, `kilometers`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D.html#unitOptions)
     */
    unitOptions?: string[];
    /**
     * A reference to the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D.html#view)
     */
    view?: SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[DirectLineMeasurement3DViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D.html#viewModel)
     */
    viewModel?: DirectLineMeasurement3DViewModelProperties;
  }

  interface DirectLineMeasurement3DViewModel extends Accessor {
    /**
     * The current measurement calculated between the two points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#measurement)
     */
    readonly measurement: DirectLineMeasurement3DViewModelMeasurement;
    /**
     * The view model's state.Value | Description------------|-------------disabled | not ready yetready | ready for measuringmeasuring | currently measuringmeasured | measuring has finished
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the distance values.**Possible Values:** metric | imperial | inches | feet | us-feet | yards | miles | nautical-miles | meters | kilometers
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#unit)
     */
    unit: string;
    /**
     * List of unit systems (imperial, metric) and specific units for displaying the distance values.By default, the following units are included: `metric`, `imperial`, `inches`, `feet`, `us-feet`, `yards`, `miles`, `nautical-miles`, `meters`, `kilometers`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#unitOptions)
     */
    unitOptions: string[];
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#view)
     */
    view: SceneView;

    /**
     * Clears the current measurement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#clearMeasurement)
     *
     *
     */
    clearMeasurement(): void;
    /**
     * Starts a new measurement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#newMeasurement)
     *
     *
     */
    newMeasurement(): void;
  }

  interface DirectLineMeasurement3DViewModelConstructor {
    new (properties?: DirectLineMeasurement3DViewModelProperties): DirectLineMeasurement3DViewModel;
  }

  export const DirectLineMeasurement3DViewModel: DirectLineMeasurement3DViewModelConstructor;

  interface DirectLineMeasurement3DViewModelProperties {
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the distance values.**Possible Values:** metric | imperial | inches | feet | us-feet | yards | miles | nautical-miles | meters | kilometers
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#unit)
     */
    unit?: string;
    /**
     * List of unit systems (imperial, metric) and specific units for displaying the distance values.By default, the following units are included: `metric`, `imperial`, `inches`, `feet`, `us-feet`, `yards`, `miles`, `nautical-miles`, `meters`, `kilometers`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#unitOptions)
     */
    unitOptions?: string[];
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#view)
     */
    view?: SceneViewProperties;
  }

  export interface DirectLineMeasurement3DViewModelMeasurement extends Object {
    /**
     * Describes the mode in which the measurement was taken. In `euclidean` mode, the distances are measured as straight linesin the [ECEF](https://en.wikipedia.org/wiki/ECEF) coordinate system. In `geodesic` mode, the distances are measured as geodesic lineson the WGS84 ellipsoid.**Possible Values:** euclidean | geodesic
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#measurement)
     */
    measurementMode: string;
    /**
     * The direct distance between the two points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#measurement)
     */
    directDistance: DirectLineMeasurement3DViewModelMeasurementValue;
    /**
     * The horizontal distance between the two points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#measurement)
     */
    horizontalDistance: DirectLineMeasurement3DViewModelMeasurementValue;
    /**
     * The vertical distance between the two points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#measurement)
     */
    verticalDistance: DirectLineMeasurement3DViewModelMeasurementValue;
  }

  /**
   * Measurement value.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#MeasurementValue)
   */
  export interface DirectLineMeasurement3DViewModelMeasurementValue extends Object {
    /**
     * Textual representation of the measured value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#MeasurementValue)
     */
    text: string;
    /**
     * State of the measured value.Value | Description------------|-------------available | measured value is availableunavailable | measured value is not available due an incomplete measurement or because the value is not available for the given measurement configuration (e.g. direct distance is unavailable in `geodesic` mode)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#MeasurementValue)
     */
    state: string;
  }

  interface DistanceMeasurement2D extends Widget {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D.html#iconClass)
     */
    iconClass: string;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the distance values.**Possible Values:** metric | imperial | inches | feet | us-feet | yards | miles | nautical-miles | meters | kilometers
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D.html#unit)
     */
    unit:
      | "metric"
      | "imperial"
      | "inches"
      | "feet"
      | "us-feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "meters"
      | "kilometers";
    /**
     * List of available units and unit systems (imperial, metric) for displaying the distance values.By default, the following units are included: `metric`, `imperial`, `inches`, `feet`, `us-feet`, `yards`, `miles`, `nautical-miles`, `meters`, `kilometers`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D.html#unitOptions)
     */
    unitOptions: string[];
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). Set this to link the widgetto a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D.html#view)
     */
    view: MapView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[DistanceMeasurement2DViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html)class to access all properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D.html#viewModel)
     */
    viewModel: DistanceMeasurement2DViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D.html#render)
     *
     *
     */
    render(): any;
  }

  interface DistanceMeasurement2DConstructor {
    new (properties?: DistanceMeasurement2DProperties): DistanceMeasurement2D;
  }

  export const DistanceMeasurement2D: DistanceMeasurement2DConstructor;

  interface DistanceMeasurement2DProperties extends WidgetProperties {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D.html#iconClass)
     */
    iconClass?: string;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the distance values.**Possible Values:** metric | imperial | inches | feet | us-feet | yards | miles | nautical-miles | meters | kilometers
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D.html#unit)
     */
    unit?:
      | "metric"
      | "imperial"
      | "inches"
      | "feet"
      | "us-feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "meters"
      | "kilometers";
    /**
     * List of available units and unit systems (imperial, metric) for displaying the distance values.By default, the following units are included: `metric`, `imperial`, `inches`, `feet`, `us-feet`, `yards`, `miles`, `nautical-miles`, `meters`, `kilometers`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D.html#unitOptions)
     */
    unitOptions?: string[];
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). Set this to link the widgetto a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D.html#view)
     */
    view?: MapViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[DistanceMeasurement2DViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html)class to access all properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D.html#viewModel)
     */
    viewModel?: DistanceMeasurement2DViewModel;
  }

  interface DistanceMeasurement2DViewModel {
    /**
     * The threshold distance used by the "auto" mode to switch between planar and geodesiclinear computations. The threshold is measured in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#geodesicDistanceThreshold)
     *
     * @default 100000
     */
    geodesicDistanceThreshold: number;
    /**
     * The length and geometry of the measurement polyline in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#measurement)
     */
    readonly measurement: DistanceMeasurement2DViewModelMeasurement;
    /**
     * This property returns the locale specific representation of the length. Lengths arerounded to two decimal places. Lengths are sourced from the [measurement](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#measurement) property(in meters) and converted to the user defined units or system and mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#measurementLabel)
     */
    readonly measurementLabel: string;
    /**
     * The mode used to calculate the length of lines.**Possible Values:** auto | planar | geodesic
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#mode)
     *
     * @default auto
     */
    mode: "auto" | "planar" | "geodesic";
    /**
     * An array of valid mode values. By default, the following units are included: `auto`, `planar`, `geodesic`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#modes)
     */
    readonly modes: string[];
    /**
     * The view model's state.**Possible Values:** disabled | ready | measuring | measured   Value    | Description------------|-------------disabled    | not ready yetready       | ready for measuringmeasuring   | measuring has startedmeasured    | measuring has finished
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the distance values.**Possible Values:** metric | imperial | inches | feet | us-feet | yards | miles | nautical-miles | meters | kilometers
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#unit)
     */
    unit:
      | "metric"
      | "imperial"
      | "inches"
      | "feet"
      | "us-feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "meters"
      | "kilometers";
    /**
     * List of available units and unit systems (imperial, metric) for displaying the distance values.By default, the following units are included: `metric`, `imperial`, `inches`, `feet`, `us-feet`, `yards`, `miles`, `nautical-miles`, `meters`, `kilometers`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#unitOptions)
     */
    unitOptions: string[];
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#view)
     */
    view: MapView;

    /**
     * Clears the current measurement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#clearMeasurement)
     *
     *
     */
    clearMeasurement(): void;
    /**
     * Starts a new measurement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#newMeasurement)
     *
     *
     */
    newMeasurement(): void;
  }

  interface DistanceMeasurement2DViewModelConstructor {
    new (properties?: any): DistanceMeasurement2DViewModel;
  }

  export const DistanceMeasurement2DViewModel: DistanceMeasurement2DViewModelConstructor;

  export interface DistanceMeasurement2DViewModelMeasurement extends Object {
    /**
     * Line length (m).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#measurement)
     */
    length: number;
    /**
     * Measurement line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#measurement)
     */
    geometry: any;
  }

  interface Editor extends Widget {
    /**
     * A property indicating the current active workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#activeWorkflow)
     */
    readonly activeWorkflow: Workflow;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#allowedWorkflows)
     */
    allowedWorkflows: string[];
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#iconClass)
     */
    readonly iconClass: string;
    /**
     * An array of editing configurations for individual layers.If you have an editable feature layer but do not wantthe end user to do any type of editing, you can limit this bysetting the `enabled` property to `false`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#layerInfos)
     */
    layerInfos: LayerInfo[];
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#supportingWidgetDefaults)
     */
    supportingWidgetDefaults: SupportingWidgetDefaults;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). This viewprovides the editable layers for the Editor widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#view)
     */
    view: MapView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[EditorViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#viewModel)
     */
    viewModel: EditorViewModel;

    /**
     * Cancels any active workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#cancelWorkflow)
     *
     *
     */
    cancelWorkflow(): void;
    /**
     * This is applicable if there is an active update workflow. If so, this methoddeletes the workflow feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#deleteFeatureFromWorkflow)
     *
     *
     */
    deleteFeatureFromWorkflow(): void;
    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#render)
     *
     *
     */
    render(): any;
    /**
     * Initiates the `create` workflow by displaying the panel where feature creation begins. This methodtakes a [CreationInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#CreationInfo) object containing the layer(s) and template(s)to use.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#startCreateWorkflowAtFeatureCreation)
     *
     * @param creationInfo An object containinginformation needed to create a new feature using the Editor widget. This objectprovides the feature template and layer for creating a new feature.
     *
     */
    startCreateWorkflowAtFeatureCreation(creationInfo: CreationInfo): void;
    /**
     * This method starts the Editor workflow where it waits for the featureto be selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#startCreateWorkflowAtFeatureEdit)
     *
     * @param feature The feature to be edited.
     *
     */
    startCreateWorkflowAtFeatureEdit(feature: Graphic): void;
    /**
     * Initiates the `create` workflow by displaying the [FeatureTemplates](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html) panel.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#startCreateWorkflowAtFeatureTypeSelection)
     *
     *
     */
    startCreateWorkflowAtFeatureTypeSelection(): void;
    /**
     * Starts the `update` workflow at the feature geometry and attribute editing panel.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#startUpdateWorkflowAtFeatureEdit)
     *
     * @param feature The feature to be updated.
     *
     */
    startUpdateWorkflowAtFeatureEdit(feature: Graphic): void;
    /**
     * Starts the `update` workflow using the current selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#startUpdateWorkflowAtFeatureSelection)
     *
     *
     */
    startUpdateWorkflowAtFeatureSelection(): void;
    /**
     * This method starts the Editor workflow where it waits for multiple featuresto be selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#startUpdateWorkflowAtMultipleFeatureSelection)
     *
     * @param candidates An array of features to be updated.This is only relevant when there are multiple candidates to update.
     *
     */
    startUpdateWorkflowAtMultipleFeatureSelection(candidates: Graphic[]): void;
  }

  interface EditorConstructor {
    new (properties?: EditorProperties): Editor;
  }

  export const Editor: EditorConstructor;

  interface EditorProperties extends WidgetProperties {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#allowedWorkflows)
     */
    allowedWorkflows?: string[];
    /**
     * An array of editing configurations for individual layers.If you have an editable feature layer but do not wantthe end user to do any type of editing, you can limit this bysetting the `enabled` property to `false`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#layerInfos)
     */
    layerInfos?: LayerInfo[];
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#supportingWidgetDefaults)
     */
    supportingWidgetDefaults?: SupportingWidgetDefaults;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). This viewprovides the editable layers for the Editor widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#view)
     */
    view?: MapViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[EditorViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#viewModel)
     */
    viewModel?: EditorViewModelProperties;
  }

  interface EditorViewModel extends Accessor {
    /**
     * A property indicating the current active workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#activeWorkflow)
     */
    readonly activeWorkflow: Workflow;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#allowedWorkflows)
     */
    allowedWorkflows: string[];
    /**
     * Convenience property that reads whether there are any editable layers that support the `create` workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#canCreate)
     */
    readonly canCreate: boolean;
    /**
     * Convenience property that reads whether there are any editable layers that support the `update` workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#canUpdate)
     */
    readonly canUpdate: boolean;
    /**
     * A collection of editable item objects that match the feature being updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#editableItems)
     */
    readonly editableItems: Collection<EditableItem>;
    /**
     * An array of objects containing information specific to any failed editing operations.In addition to the error(s), options to `retry()` or `cancel()` are provided.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#failures)
     */
    readonly failures: EditorViewModelFailures[];
    /**
     * The [FeatureFormViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html)for supporting the editor widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#featureFormViewModel)
     */
    featureFormViewModel: FeatureFormViewModel;
    /**
     * The [FeatureTemplatesViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-FeatureTemplatesViewModel.html)for supporting the editor widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#featureTemplatesViewModel)
     */
    featureTemplatesViewModel: FeatureTemplatesViewModel;
    /**
     * An array of editing configurations for individual layers.If you have an editable feature layer but do not wantthe end user to do any type of editing, you can limit this bysetting the `enabled` property to `false`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#layerInfos)
     */
    layerInfos: LayerInfo[];
    /**
     * The [SketchViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html)for supporting the editor widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#sketchViewModel)
     */
    sketchViewModel: SketchViewModel;
    /**
     * The widget's state. Possible values are in the table below.Value | Description------|------------ready | Dependencies are met and has valid property values.disabled | Dependencies are missing and cannot provide valid inputs.editing-new-feature | The Editor is currently editing (creating) a new feature.editing-existing-feature | The Editor is currently editing an existing feature.awaiting-update-feature-candidate | The period when the application is awaiting the user's input after clicking update and multiple features are returned. Specify the feature to update.awaiting-feature-creation-info | This is the first step in the `create` workflow. A [CreationInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#CreationInfo) is required.awaiting-feature-to-update | This is the first step in the `update` workflow. A [feature](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) is required.awaiting-feature-to-create | The waiting period for when a feature is created beforte attribute/geometry edits can be performed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * When `true`, there is at least one edit request being processed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#syncing)
     */
    readonly syncing: boolean;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). This viewprovides the editable layers for the Editor widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#view)
     */
    view: MapView;

    /**
     * Cancels any active workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#cancelWorkflow)
     *
     *
     */
    cancelWorkflow(): void;
    /**
     * This is applicable if there is an active update workflow. If so, this methoddeletes the workflow feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#deleteFeatureFromWorkflow)
     *
     *
     */
    deleteFeatureFromWorkflow(): void;
    /**
     * Initiates the `create` workflow by displaying the panel where feature creation begins. This methodtakes a [CreationInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#CreationInfo) object containing the layer(s) and template(s)to use.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#startCreateWorkflowAtFeatureCreation)
     *
     * @param creationInfo An object containinginformation needed to create a new feature using the Editor widget.
     *
     */
    startCreateWorkflowAtFeatureCreation(creationInfo: CreationInfo): void;
    /**
     * This method starts the Editor workflow where it waits for the featureto be selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#startCreateWorkflowAtFeatureEdit)
     *
     * @param feature The feature to be updated.
     *
     */
    startCreateWorkflowAtFeatureEdit(feature: Graphic): void;
    /**
     * Initiates the `create` workflow by displaying the [FeatureTemplates](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html) panel.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#startCreateWorkflowAtFeatureTypeSelection)
     *
     *
     */
    startCreateWorkflowAtFeatureTypeSelection(): void;
    /**
     * Starts the update workflow at the feature geometry and attribute editing panel.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#startUpdateWorkflowAtFeatureEdit)
     *
     * @param feature The feature to be updated.
     *
     */
    startUpdateWorkflowAtFeatureEdit(feature: Graphic): void;
    /**
     * Starts the `update` workflow using the current selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#startUpdateWorkflowAtFeatureSelection)
     *
     *
     */
    startUpdateWorkflowAtFeatureSelection(): void;
    /**
     * Starts the Editor workflow where it waits for multiple featuresto be selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#startUpdateWorkflowAtMultipleFeatureSelection)
     *
     *
     */
    startUpdateWorkflowAtMultipleFeatureSelection(): void;
  }

  interface EditorViewModelConstructor {
    new (properties?: EditorViewModelProperties): EditorViewModel;
  }

  export const EditorViewModel: EditorViewModelConstructor;

  interface EditorViewModelProperties {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#allowedWorkflows)
     */
    allowedWorkflows?: string[];
    /**
     * The [FeatureFormViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html)for supporting the editor widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#featureFormViewModel)
     */
    featureFormViewModel?: FeatureFormViewModelProperties;
    /**
     * The [FeatureTemplatesViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-FeatureTemplatesViewModel.html)for supporting the editor widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#featureTemplatesViewModel)
     */
    featureTemplatesViewModel?: FeatureTemplatesViewModelProperties;
    /**
     * An array of editing configurations for individual layers.If you have an editable feature layer but do not wantthe end user to do any type of editing, you can limit this bysetting the `enabled` property to `false`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#layerInfos)
     */
    layerInfos?: LayerInfo[];
    /**
     * The [SketchViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html)for supporting the editor widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#sketchViewModel)
     */
    sketchViewModel?: SketchViewModelProperties;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). This viewprovides the editable layers for the Editor widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#view)
     */
    view?: MapViewProperties;
  }

  /**
   * The editable item available within the map.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#EditableItem)
   */
  export interface EditableItem extends Object {
    /**
     * *Read-only* The feature layer associatedwith the editable item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#EditableItem)
     */
    layer: FeatureLayer;
    /**
     * *Read-only* The workflow type that this item supports. Can be either,`update` or `create`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#EditableItem)
     */
    supports: string;
  }

  export interface EditorViewModelFailures extends Object {
    /**
     * The readonly error message.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#failures)
     */
    error: Error;
  }

  interface Workflow extends Accessor {
    /**
     * Shared workflow data.  Can be either a[CreateWorkflowData](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#CreateWorkflowData) or a [UpdateWorkflowData](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#UpdateWorkflowData).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#data)
     */
    readonly data: CreateWorkflowData | UpdateWorkflowData;
    /**
     * This property indicates whether there is a next step in the workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#hasNextStep)
     */
    readonly hasNextStep: boolean;
    /**
     * This property indicates if there is a previous step in the workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#hasPreviousStep)
     */
    readonly hasPreviousStep: boolean;
    /**
     * Indicates whether the workflow is considered active.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#started)
     *
     * @default false
     */
    readonly started: boolean;
    /**
     * The name of the current step in the workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#stepId)
     */
    readonly stepId: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#type)
     */
    readonly type: string;

    /**
     * Cancels the active workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#cancel)
     *
     *
     */
    cancel(): void;
    /**
     * Call this method when the workflow is considered finished. This method is used to help process the editing results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#commit)
     *
     *
     */
    commit(): void;
    /**
     * Moves to the next step in the workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#next)
     *
     *
     */
    next(): void;
    /**
     * Moves to the previous step in the workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#previous)
     *
     *
     */
    previous(): void;
    /**
     * Resets the workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#reset)
     *
     *
     */
    reset(): void;
    /**
     * Starts the workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#start)
     *
     *
     */
    start(): void;
  }

  interface WorkflowConstructor {
    new (properties?: WorkflowProperties): Workflow;
  }

  export const Workflow: WorkflowConstructor;

  interface WorkflowProperties {}

  /**
   * This object contains data for the `create` workflow.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#CreateWorkflowData)
   */
  export interface CreateWorkflowData extends Object {
    /**
     * The [creationInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#CreationInfo)provides the feature template and layer when creating a new feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#CreateWorkflowData)
     */
    creationInfo: CreationInfo;
    /**
     * The edits used to keep track of a feature being modified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#CreateWorkflowData)
     */
    edits: Edits;
    /**
     * The associated [EditorViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html) for this workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#CreateWorkflowData)
     */
    viewModel: EditorViewModel;
  }

  /**
   * Object used to keep track of a feature being modified.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#Edits)
   */
  export interface Edits extends Object {
    /**
     * The feature to be edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#Edits)
     */
    feature: Graphic;
    /**
     * *Read-only* When true, the edited feature has been modified from its original state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#Edits)
     */
    modified: boolean;
  }

  /**
   * This object contains data for the `update` workflow.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#UpdateWorkflowData)
   */
  export interface UpdateWorkflowData extends Object {
    /**
     * An array of features to be updated. This is only relevant when there are multiple candidates to update.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#UpdateWorkflowData)
     */
    candidates: Graphic[];
    /**
     * The object that matches the feature being updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#UpdateWorkflowData)
     */
    editableItem: EditableItem;
    /**
     * The edits used to keep track of a feature being modified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#UpdateWorkflowData)
     */
    edits: Edits;
    /**
     * The associated [EditorViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html) for this workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#UpdateWorkflowData)
     */
    viewModel: EditorViewModel;
  }

  /**
   * This object provides the feature template and layer for creating a new feature.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#CreationInfo)
   */
  export interface CreationInfo extends Object {
    /**
     * The associated feature layer wherethe new feature is created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#CreationInfo)
     */
    layer: FeatureLayer;
    /**
     * The associated feature templateused to create the new feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#CreationInfo)
     */
    template: FeatureTemplate;
  }

  /**
   * Editor configurations used for an array of fields.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#LayerInfo)
   */
  export interface LayerInfo extends Object {
    /**
     * The associated feature layer containingthe editable fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#LayerInfo)
     */
    layer: FeatureLayer;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#LayerInfo)
     */
    fieldConfig?: FieldConfig[];
    /**
     * Indicates whether to enable editing on the layer. Defaults to `true` if service supports it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#LayerInfo)
     */
    enabled?: boolean;
    /**
     * Indicates whether to enable `Add feature` functionality. Defaults to `true` if service supports it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#LayerInfo)
     */
    addEnabled?: boolean;
    /**
     * Indicates whether to enable `Update feature` functionality. Defaults to `true` if service supports it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#LayerInfo)
     */
    updateEnabled?: boolean;
    /**
     * Indicates whether to enable the ability to delete features. Defaults to `true` if service supports it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#LayerInfo)
     */
    deleteEnabled?: boolean;
  }

  /**
   * Set this to customize any supporting Editor widgets default behavior. These widgets include[FeatureForm](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html), [FeatureTemplates](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html),and [Sketch](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#SupportingWidgetDefaults)
   */
  export interface SupportingWidgetDefaults extends Object {
    /**
     * An object containing properties specific for customizing the[FeatureForm](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#SupportingWidgetDefaults)
     */
    featureForm?: SupportingWidgetDefaultsFeatureForm;
    /**
     * An object containing properties specific for customizingthe [FeatureTemplates](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#SupportingWidgetDefaults)
     */
    featureTemplates?: SupportingWidgetDefaultsFeatureTemplates;
    /**
     * An object containing properties specific for customizng the[Sketch](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#SupportingWidgetDefaults)
     */
    sketch?: SupportingWidgetDefaultsSketch;
  }

  export interface SupportingWidgetDefaultsFeatureForm extends Object {
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#SupportingWidgetDefaults)
     */
    fieldConfig?: FieldConfig[];
    /**
     * String indicating the[groupDisplay](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#groupDisplay) and how they will be displayed to the end user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#SupportingWidgetDefaults)
     */
    groupDisplay?: string;
  }

  export interface SupportingWidgetDefaultsFeatureTemplates extends Object {
    /**
     * Aids in managingvarious template items and how they display within the widget. Please refer to[groupBy API reference](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#groupBy) for additionalinformation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#SupportingWidgetDefaults)
     */
    groupBy?: string | GroupByFunction;
    /**
     * Indicates whether the [templates filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#filterEnabled)displays.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#SupportingWidgetDefaults)
     */
    filterEnabled?: boolean;
  }

  export interface SupportingWidgetDefaultsSketch extends Object {
    /**
     * An object containing the `defaultUpdateOptions`for the [Sketch](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#SupportingWidgetDefaults)
     */
    defaultUpdateOptions?: any;
    /**
     * The marker symbol used to symbolize anypoint feature updates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#SupportingWidgetDefaults)
     */
    markerSymbol?: SimpleMarkerSymbol;
    /**
     * The polygon symbol used to symbolize anypolygon feature updates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#SupportingWidgetDefaults)
     */
    polygonSymbol?: SimpleFillSymbol;
    /**
     * The line symbol used to symbolize anyline feature updates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#SupportingWidgetDefaults)
     */
    polylineSymbol?: SimpleLineSymbol;
  }

  interface Expand extends Widget {
    /**
     * Automatically collapses the expand widget instance when the view'sviewpoint updates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#autoCollapse)
     *
     * @default false
     */
    autoCollapse: boolean;
    /**
     * Icon font used to style the Expand button.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#collapseIconClass)
     */
    collapseIconClass: string;
    /**
     * Tooltip to display to indicate Expand widget can be collapsed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#collapseTooltip)
     *
     * @default "Collapse" (English locale)
     */
    collapseTooltip: string;
    /**
     * The content to display within the expanded Expand widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#content)
     */
    content: Node | string | Widget;
    /**
     * Indicates whether the widget is currently expanded or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#expanded)
     *
     * @default false
     */
    expanded: boolean;
    /**
     * Icon font used to style the Expand button.Will automatically use the [content's](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#content) iconClass if it has one.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#expandIconClass)
     */
    expandIconClass: string;
    /**
     * Tooltip to display to indicate Expand widget can be expanded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#expandTooltip)
     *
     * @default "Expand" (English locale)
     */
    expandTooltip: string;
    /**
     * This value associates two or more Expand widget instances with each other, allowing oneinstance to auto collapse when another instance in the same group is expanded. For auto collapsingto take effect, all instances of the group must be included in the [view.ui](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#ui).For example, if you place multiple Expand instances in the top-left of the view's ui, you can assign them to agroup called `top-left`. If one Expand instance is expanded and the user clicks on a different instance in the`top-left` group, then the first instance is collapsed, allowing the content of the second instance to befully visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#group)
     */
    group: string;
    /**
     * A number to display at the corner of the widget to indicate the number of, for example, open issues or unread notices.![expand widget icon number](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/expand-with-iconnumber.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#iconNumber)
     */
    iconNumber: number;
    /**
     * The mode in which the widget displays. These modes are listed below.mode | description---------------|------------auto | This is the default mode. It is responsive to browser size changes and will update based on whether the widget is viewed in a desktop or mobile application.floating | Use this mode if you wish to always display the widget as floating regardless of browser size.drawer | Use this mode if you wish to always display the widget in a panel regardless of browser size.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#mode)
     *
     * @default "auto"
     */
    mode: string;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[ExpandViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand-ExpandViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#viewModel)
     */
    viewModel: ExpandViewModel;

    /**
     * Collapse the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#collapse)
     *
     *
     */
    collapse(): void;
    /**
     * Expand the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#expand)
     *
     *
     */
    expand(): void;
    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#render)
     *
     *
     */
    render(): any;
    /**
     * Toggle the widget by expanding it if it's collapsed, or collapsing it if it's expanded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#toggle)
     *
     *
     */
    toggle(): void;
  }

  interface ExpandConstructor {
    new (properties?: ExpandProperties): Expand;
  }

  export const Expand: ExpandConstructor;

  interface ExpandProperties extends WidgetProperties {
    /**
     * Automatically collapses the expand widget instance when the view'sviewpoint updates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#autoCollapse)
     *
     * @default false
     */
    autoCollapse?: boolean;
    /**
     * Icon font used to style the Expand button.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#collapseIconClass)
     */
    collapseIconClass?: string;
    /**
     * Tooltip to display to indicate Expand widget can be collapsed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#collapseTooltip)
     *
     * @default "Collapse" (English locale)
     */
    collapseTooltip?: string;
    /**
     * The content to display within the expanded Expand widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#content)
     */
    content?: Node | string | WidgetProperties;
    /**
     * Indicates whether the widget is currently expanded or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#expanded)
     *
     * @default false
     */
    expanded?: boolean;
    /**
     * Icon font used to style the Expand button.Will automatically use the [content's](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#content) iconClass if it has one.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#expandIconClass)
     */
    expandIconClass?: string;
    /**
     * Tooltip to display to indicate Expand widget can be expanded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#expandTooltip)
     *
     * @default "Expand" (English locale)
     */
    expandTooltip?: string;
    /**
     * This value associates two or more Expand widget instances with each other, allowing oneinstance to auto collapse when another instance in the same group is expanded. For auto collapsingto take effect, all instances of the group must be included in the [view.ui](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#ui).For example, if you place multiple Expand instances in the top-left of the view's ui, you can assign them to agroup called `top-left`. If one Expand instance is expanded and the user clicks on a different instance in the`top-left` group, then the first instance is collapsed, allowing the content of the second instance to befully visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#group)
     */
    group?: string;
    /**
     * A number to display at the corner of the widget to indicate the number of, for example, open issues or unread notices.![expand widget icon number](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/expand-with-iconnumber.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#iconNumber)
     */
    iconNumber?: number;
    /**
     * The mode in which the widget displays. These modes are listed below.mode | description---------------|------------auto | This is the default mode. It is responsive to browser size changes and will update based on whether the widget is viewed in a desktop or mobile application.floating | Use this mode if you wish to always display the widget as floating regardless of browser size.drawer | Use this mode if you wish to always display the widget in a panel regardless of browser size.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#mode)
     *
     * @default "auto"
     */
    mode?: string;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[ExpandViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand-ExpandViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#viewModel)
     */
    viewModel?: ExpandViewModelProperties;
  }

  interface ExpandViewModel extends Accessor {
    /**
     * Automatically collapses the expand widget instance when the view'sviewpoint updates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand-ExpandViewModel.html#autoCollapse)
     *
     * @default false
     */
    autoCollapse: boolean;
    /**
     * Whether the widget is currently expanded or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand-ExpandViewModel.html#expanded)
     *
     * @default false
     */
    expanded: boolean;
    /**
     * This value associates two or more Expand widget instances with each other, allowing oneinstance to auto collapse when another instance in the same group is expanded. For auto collapsingto take effect, all instances of the group must be included in the [view.ui](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#ui).For example, if you place multiple Expand instances in the top-left of the view's ui, you can assign them to agroup called `top-left`. If one Expand instance is expanded and the user clicks on a different instance in the`top-left` group, then the first instance is collapsed, allowing the content of the second instance to befully visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand-ExpandViewModel.html#group)
     */
    group: string;
    /**
     * The view model's state.**Possible Values:** ready | disabled
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand-ExpandViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * The view in which the Expand is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand-ExpandViewModel.html#view)
     */
    view: MapView | SceneView;
  }

  interface ExpandViewModelConstructor {
    new (properties?: ExpandViewModelProperties): ExpandViewModel;
  }

  export const ExpandViewModel: ExpandViewModelConstructor;

  interface ExpandViewModelProperties {
    /**
     * Automatically collapses the expand widget instance when the view'sviewpoint updates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand-ExpandViewModel.html#autoCollapse)
     *
     * @default false
     */
    autoCollapse?: boolean;
    /**
     * Whether the widget is currently expanded or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand-ExpandViewModel.html#expanded)
     *
     * @default false
     */
    expanded?: boolean;
    /**
     * This value associates two or more Expand widget instances with each other, allowing oneinstance to auto collapse when another instance in the same group is expanded. For auto collapsingto take effect, all instances of the group must be included in the [view.ui](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#ui).For example, if you place multiple Expand instances in the top-left of the view's ui, you can assign them to agroup called `top-left`. If one Expand instance is expanded and the user clicks on a different instance in the`top-left` group, then the first instance is collapsed, allowing the content of the second instance to befully visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand-ExpandViewModel.html#group)
     */
    group?: string;
    /**
     * The view in which the Expand is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand-ExpandViewModel.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
  }

  interface Feature extends Widget {
    /**
     * Enables automatic creation of a popup template for layersthat have popups enabled but no popupTemplate defined.Automatic popup templates are supported for layers that supportthe `createPopupTemplate` method.(Supported for [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html),[SceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html), [CSVLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html),[StreamLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html), and [ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html)).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#defaultPopupTemplateEnabled)
     *
     * @default false
     */
    defaultPopupTemplateEnabled: boolean;
    /**
     * The [Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) used to represent the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#graphic)
     *
     * @default null
     */
    graphic: Graphic;
    /**
     * A reference to the [view's](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html). Use this propertywhen needing to get access to the underlying layers within the map. This can then be usedwithin [Arcade](https://developers.arcgis.com/arcade) expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#map)
     *
     * @default null
     */
    map: Map;
    /**
     * The spatial reference used for [Arcade](https://developers.arcgis.com/arcade) operations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#spatialReference)
     *
     * @default null
     */
    spatialReference: SpatialReference;
    /**
     * The title for the feature. You can disable this via the [visibleElements](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#visibleElements) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#title)
     *
     * @default null
     */
    readonly title: string;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[FeatureViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#viewModel)
     */
    viewModel: FeatureViewModel;
    /**
     * The visible elements that are displayed within the widget's [graphic.popupTemplate.content](esri-PopupTemplate.html#content).This property provides the ability to turn individual elements of the widget's display on/off.See the [PopupTemplate.content](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#content) documentationfor additional information on how these elements work.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#visibleElements)
     */
    visibleElements: VisibleElements;

    /**
     * Paginates to a specified [media](esri-popup-content-MediaContent.html) info object. For example,you may have [media](esri-popup-content-MediaContent.html) content which containsmultiple `mediaInfos`. This method allows you to specify the index of the `mediaInfos`you wish to display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#goToMedia)
     *
     * @param contentElementIndex The index position of the [media](esri-popup-content-MediaContent.html) content element to be updated.
     * @param mediaInfoIndex The index position of the [media](esri-popup-content-MediaContent.html) info object you wish to display.
     *
     */
    goToMedia(contentElementIndex: number, mediaInfoIndex: number): void;
    /**
     * Paginates to the next [media](esri-popup-content-MediaContent.html) info.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#nextMedia)
     *
     * @param contentElementIndex The index position of the [media](esri-popup-content-MediaContent.html) content element.
     *
     */
    nextMedia(contentElementIndex: number): void;
    /**
     * Paginates to the previous [media](esri-popup-content-MediaContent.html) info in the specified[media](esri-popup-content-MediaContent.html) content element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#previousMedia)
     *
     * @param contentElementIndex The index position of the [media](esri-popup-content-MediaContent.html) content element.
     *
     */
    previousMedia(contentElementIndex: number): void;
    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#render)
     *
     *
     */
    render(): any;
  }

  interface FeatureConstructor {
    new (properties?: FeatureProperties): Feature;
  }

  export const Feature: FeatureConstructor;

  interface FeatureProperties extends WidgetProperties {
    /**
     * Enables automatic creation of a popup template for layersthat have popups enabled but no popupTemplate defined.Automatic popup templates are supported for layers that supportthe `createPopupTemplate` method.(Supported for [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html),[SceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html), [CSVLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html),[StreamLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html), and [ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html)).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#defaultPopupTemplateEnabled)
     *
     * @default false
     */
    defaultPopupTemplateEnabled?: boolean;
    /**
     * The [Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) used to represent the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#graphic)
     *
     * @default null
     */
    graphic?: GraphicProperties;
    /**
     * A reference to the [view's](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html). Use this propertywhen needing to get access to the underlying layers within the map. This can then be usedwithin [Arcade](https://developers.arcgis.com/arcade) expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#map)
     *
     * @default null
     */
    map?: MapProperties;
    /**
     * The spatial reference used for [Arcade](https://developers.arcgis.com/arcade) operations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#spatialReference)
     *
     * @default null
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[FeatureViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#viewModel)
     */
    viewModel?: FeatureViewModelProperties;
    /**
     * The visible elements that are displayed within the widget's [graphic.popupTemplate.content](esri-PopupTemplate.html#content).This property provides the ability to turn individual elements of the widget's display on/off.See the [PopupTemplate.content](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#content) documentationfor additional information on how these elements work.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#visibleElements)
     */
    visibleElements?: VisibleElements;
  }

  interface FeatureViewModel extends Accessor {
    /**
     * The [content](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#content) of the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#content)
     *
     * @default null
     */
    readonly content: Content[] | Widget | HTMLElement | string;
    /**
     * Enables automatic creation of a popup template for layersthat have popups enabled but no popupTemplate defined.Automatic popup templates are supported for layers that supportthe `createPopupTemplate` method.(Supported for [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html),[SceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html), [CSVLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html),[StreamLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html), and [ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html)).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#defaultPopupTemplateEnabled)
     *
     * @default false
     */
    defaultPopupTemplateEnabled: boolean;
    /**
     * The formatted attributes calculated from `fieldInfo` [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html)content. They are obtained from the feature's [graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#graphic) attribute valuesand can be read: * globally using the [fieldInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#fieldInfos) property   directly at the root level of the [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html), or * per an individual content element. This element is defined with a [fieldsContent](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html)   popup element set on the PopupTemplate content property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#formattedAttributes)
     *
     * @default null
     */
    readonly formattedAttributes: FeatureViewModelFormattedAttributes;
    /**
     * The [Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) used to represent the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#graphic)
     *
     * @default null
     */
    graphic: Graphic;
    /**
     * A read-only property containing metadata regarding the last edit performed on a feature.This object has the following properties:
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#lastEditInfo)
     */
    readonly lastEditInfo: FeatureViewModelLastEditInfo;
    /**
     * A reference to the [view's](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html). Use this propertywhen needing to get access to the underlying layers within the map. This can then be usedwithin [Arcade](https://developers.arcgis.com/arcade) expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#map)
     *
     * @default null
     */
    map: Map;
    /**
     * The spatial reference used for [Arcade](https://developers.arcgis.com/arcade) operations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#spatialReference)
     *
     * @default null
     */
    spatialReference: SpatialReference;
    /**
     * The title for the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#title)
     */
    readonly title: string;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#view)
     */
    view: MapView | SceneView;
    /**
     * Indicates whether the feature is currently waiting for all of its content to finish loading.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#waitingForContent)
     */
    readonly waitingForContent: boolean;
  }

  interface FeatureViewModelConstructor {
    new (properties?: FeatureViewModelProperties): FeatureViewModel;
  }

  export const FeatureViewModel: FeatureViewModelConstructor;

  interface FeatureViewModelProperties {
    /**
     * Enables automatic creation of a popup template for layersthat have popups enabled but no popupTemplate defined.Automatic popup templates are supported for layers that supportthe `createPopupTemplate` method.(Supported for [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html),[SceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html), [CSVLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html),[StreamLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html), and [ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html)).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#defaultPopupTemplateEnabled)
     *
     * @default false
     */
    defaultPopupTemplateEnabled?: boolean;
    /**
     * The [Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) used to represent the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#graphic)
     *
     * @default null
     */
    graphic?: GraphicProperties;
    /**
     * A reference to the [view's](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html). Use this propertywhen needing to get access to the underlying layers within the map. This can then be usedwithin [Arcade](https://developers.arcgis.com/arcade) expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#map)
     *
     * @default null
     */
    map?: MapProperties;
    /**
     * The spatial reference used for [Arcade](https://developers.arcgis.com/arcade) operations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#spatialReference)
     *
     * @default null
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
  }

  export interface FeatureViewModelFormattedAttributes extends Object {
    /**
     * The formatted attributes specified at the root level of the [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html)using the [PopupTemplate.fieldInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#fieldInfos) property.
     *
     * [Read more...](global.html)
     */
    global?: any;
    /**
     * The formatted attributes for an individual content element. This is derived from themodule:esri/PopupTemplate PopupTemplate, orper an individual content element. This element is defined with a [fieldsContent](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html)popup element set on the PopupTemplate's [content](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#content).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#formattedAttributes)
     */
    content?: any;
  }

  export interface FeatureViewModelLastEditInfo extends Object {
    /**
     * User who performed the last edit on a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#lastEditInfo)
     */
    user: string;
    /**
     * Date that the edit was performed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#lastEditInfo)
     */
    date: string;
    /**
     * The type of edit that was performed on the feature.**Possible values:** edit | create
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#lastEditInfo)
     */
    type: string;
  }

  export interface VisibleContentElements extends Object {
    /**
     * Indicates whether to display any [AttachmentsContent](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-AttachmentsContent.html) elements. Default is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#VisibleContentElements)
     */
    attachments?: boolean;
    /**
     * Indicates whether to display any [FieldsContent](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html) elements. Default is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#VisibleContentElements)
     */
    fields?: boolean;
    /**
     * Indicates whether to display any [MediaContent](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-MediaContent.html) elements. Default is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#VisibleContentElements)
     */
    media?: boolean;
    /**
     * Indicates whether to display any [TextContent](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-TextContent.html) elements. Default is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#VisibleContentElements)
     */
    text?: boolean;
  }

  export interface VisibleElements extends Object {
    /**
     * Indicates whether the title associated with the feature displays.Default value is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#VisibleElements)
     */
    title?: boolean;
    /**
     * Indicateswhether content for the Feature displays, can also indicate the specific types of content elementsby setting it via [VisibleContentElements](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#VisibleContentElements). The default valueis `true`, everything displays.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#VisibleElements)
     */
    content?: boolean | VisibleContentElements;
    /**
     * Indicates whether [lastEditInfo](esri-widgets-Feature-FeatureViewModel.html#lastEditInfo) is displayedwithin the feature. Default value is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#VisibleElements)
     */
    lastEditInfo?: boolean;
  }

  interface FeatureForm extends Widget {
    /**
     * The associated feature containing the editable attributes.A common way to access this is via the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#hitTest)or [SceneView's](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#hitTest) `hitTest()`method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#feature)
     */
    feature: Graphic;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#fieldConfig)
     */
    fieldConfig: FieldConfig[] | FieldGroupConfig[];
    /**
     * Defines how groups will be displayed to the user.**Possible Values:**Value | Description |----- | ----------- |all | All groups will be expanded.sequential | A single group will be expanded at a time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#groupDisplay)
     *
     * @default all
     */
    groupDisplay: string;
    /**
     * Layer containing the editable feature attributes.If this layer is not specified, it is the same as the[graphic's layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#layer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#layer)
     */
    layer: FeatureLayer;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[FeatureFormViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#viewModel)
     */
    viewModel: FeatureFormViewModel;

    /**
     * Returns all of the field values, regardless of whether or not they were updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#getValues)
     *
     *
     */
    getValues(): any;
    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#render)
     *
     *
     */
    render(): any;
    /**
     * Fires the [submit](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#event-submit) event.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#submit)
     *
     *
     */
    submit(): void;
  }

  interface FeatureFormConstructor {
    new (properties?: FeatureFormProperties): FeatureForm;
  }

  export const FeatureForm: FeatureFormConstructor;

  interface FeatureFormProperties extends WidgetProperties {
    /**
     * The associated feature containing the editable attributes.A common way to access this is via the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#hitTest)or [SceneView's](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#hitTest) `hitTest()`method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#feature)
     */
    feature?: GraphicProperties;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#fieldConfig)
     */
    fieldConfig?: FieldConfigProperties[] | FieldGroupConfigProperties[];
    /**
     * Defines how groups will be displayed to the user.**Possible Values:**Value | Description |----- | ----------- |all | All groups will be expanded.sequential | A single group will be expanded at a time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#groupDisplay)
     *
     * @default all
     */
    groupDisplay?: string;
    /**
     * Layer containing the editable feature attributes.If this layer is not specified, it is the same as the[graphic's layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#layer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#layer)
     */
    layer?: FeatureLayerProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[FeatureFormViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#viewModel)
     */
    viewModel?: FeatureFormViewModelProperties;
  }

  interface FeatureFormViewModel extends Accessor, Evented {
    /**
     * The associated feature containing the editable attributes.A common way to access this is via the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#hitTest)or [SceneView's](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#hitTest) `hitTest()`method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#feature)
     */
    feature: Graphic;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#fieldConfig)
     */
    fieldConfig: FieldConfig[] | FieldGroupConfig[];
    /**
     * The input fields and/or grouped field rendered by the[FeatureForm](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#inputField)
     */
    readonly inputField: InputField[] | InputFieldGroup[];
    /**
     * Layer containing the editable feature attributes.If this layer is not specified, it is the same as the[graphic's layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#layer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#layer)
     */
    layer: FeatureLayer;
    /**
     * The widget's state. Possible values are in the table below.Value | Description------|------------ready | Dependencies are met and has valid property values.disabled | Dependencies are missing and cannot provide valid inputs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * Indicates whether all input fields are valid.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#valid)
     */
    valid: boolean;

    /**
     * Convenience method to find input fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#findField)
     *
     * @param fieldName The input field to find.
     *
     */
    findField(fieldName: string): InputField;
    /**
     * Returns all of the field values, regardless of whether or not they were updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#getValues)
     *
     *
     */
    getValues(): any;
    /**
     * Fires the [submit](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#event-submit) event.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#submit)
     *
     *
     */
    submit(): void;
  }

  interface FeatureFormViewModelConstructor {
    new (properties?: FeatureFormViewModelProperties): FeatureFormViewModel;
  }

  export const FeatureFormViewModel: FeatureFormViewModelConstructor;

  interface FeatureFormViewModelProperties {
    /**
     * The associated feature containing the editable attributes.A common way to access this is via the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#hitTest)or [SceneView's](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#hitTest) `hitTest()`method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#feature)
     */
    feature?: GraphicProperties;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#fieldConfig)
     */
    fieldConfig?: FieldConfigProperties[] | FieldGroupConfigProperties[];
    /**
     * Layer containing the editable feature attributes.If this layer is not specified, it is the same as the[graphic's layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#layer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#layer)
     */
    layer?: FeatureLayerProperties;
    /**
     * Indicates whether all input fields are valid.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#valid)
     */
    valid?: boolean;
  }

  interface FieldConfig extends Accessor {
    /**
     * The field's description. The description is shown below the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#description)
     */
    description: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#domain)
     */
    domain: CodedValueDomain | RangeDomain;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#editable)
     *
     * @default true
     */
    editable: boolean;
    /**
     * The type of editor to use for `string` field types. Possible values are in the table below.Value | Description------|------------text-box | An HTML textbox will be used to capture input.text-area | An HTML textarea will be used to capture input.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#editorType)
     *
     * @default "text-box"
     */
    editorType: string;
    /**
     * This property is rendered as a tooltip in the [FeatureForm](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html) widget.It displays a hint for the attribute field's value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#hint)
     */
    hint: string;
    /**
     * The field's label. The label is shown above the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#label)
     */
    label: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#maxLength)
     *
     * @default -1
     */
    maxLength: number;
    /**
     * The field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#name)
     */
    name: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#required)
     *
     * @default false
     */
    required: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#visibilityExpression)
     *
     * @default null
     */
    visibilityExpression: string;
  }

  interface FieldConfigConstructor {
    new (properties?: FieldConfigProperties): FieldConfig;
  }

  export const FieldConfig: FieldConfigConstructor;

  interface FieldConfigProperties {
    /**
     * The field's description. The description is shown below the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#description)
     */
    description?: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#domain)
     */
    domain?: CodedValueDomainProperties | RangeDomainProperties;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#editable)
     *
     * @default true
     */
    editable?: boolean;
    /**
     * The type of editor to use for `string` field types. Possible values are in the table below.Value | Description------|------------text-box | An HTML textbox will be used to capture input.text-area | An HTML textarea will be used to capture input.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#editorType)
     *
     * @default "text-box"
     */
    editorType?: string;
    /**
     * This property is rendered as a tooltip in the [FeatureForm](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html) widget.It displays a hint for the attribute field's value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#hint)
     */
    hint?: string;
    /**
     * The field's label. The label is shown above the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#label)
     */
    label?: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#maxLength)
     *
     * @default -1
     */
    maxLength?: number;
    /**
     * The field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#name)
     */
    name?: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#required)
     *
     * @default false
     */
    required?: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#visibilityExpression)
     *
     * @default null
     */
    visibilityExpression?: string;
  }

  interface FieldGroupConfig extends Accessor {
    /**
     * The field's description. The description is shown below the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldGroupConfig.html#description)
     */
    description: string;
    /**
     * The field configurations belonging to a group. For an example of grouped fieldconfigurations, please refer to the [Update Feature Attributes](https://developers.arcgis.com/javascript/latest/sample-code/editing-groupedfeatureform/index.html)sample.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldGroupConfig.html#fieldConfig)
     */
    fieldConfig: FieldConfig[];
    /**
     * The field's label. The label is shown above the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldGroupConfig.html#label)
     */
    label: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldGroupConfig.html#visibilityExpression)
     *
     * @default null
     */
    visibilityExpression: string;
  }

  interface FieldGroupConfigConstructor {
    new (properties?: FieldGroupConfigProperties): FieldGroupConfig;
  }

  export const FieldGroupConfig: FieldGroupConfigConstructor;

  interface FieldGroupConfigProperties {
    /**
     * The field's description. The description is shown below the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldGroupConfig.html#description)
     */
    description?: string;
    /**
     * The field configurations belonging to a group. For an example of grouped fieldconfigurations, please refer to the [Update Feature Attributes](https://developers.arcgis.com/javascript/latest/sample-code/editing-groupedfeatureform/index.html)sample.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldGroupConfig.html#fieldConfig)
     */
    fieldConfig?: FieldConfigProperties[];
    /**
     * The field's label. The label is shown above the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldGroupConfig.html#label)
     */
    label?: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldGroupConfig.html#visibilityExpression)
     *
     * @default null
     */
    visibilityExpression?: string;
  }

  interface InputField extends Accessor {
    /**
     * The field's description.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#description)
     */
    readonly description: string;
    /**
     * The input value's domain. This is used to constrain the allowable values of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#domain)
     */
    readonly domain: CodedValueDomain | RangeDomain;
    /**
     * When true, the field can be edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#editable)
     */
    readonly editable: boolean;
    /**
     * The type of editor used when working with `string` fields.Possible values are in the table below.Value | Description------|------------text-box | An HTML textbox used to capture input.text-area | An HTML textarea used to capture input.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#editorType)
     *
     * @default text-box
     */
    readonly editorType: string;
    /**
     * If the input field's value is invalid, this property returns validation error code.Otherwise, it is `null`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#error)
     */
    readonly error: string;
    /**
     * A user-friendly formatted error message based on the [validation error code](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#error).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#errorMessage)
     */
    readonly errorMessage: string;
    /**
     * The group this input field belongs to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#group)
     */
    readonly group: InputFieldGroup;
    /**
     * A hint for the field's value. This property is rendered as a tooltip.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#hint)
     */
    readonly hint: string;
    /**
     * The field's label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#label)
     */
    readonly label: string;
    /**
     * Restricts the input length.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#maxLength)
     */
    readonly maxLength: number;
    /**
     * The associated field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#name)
     */
    readonly name: string;
    /**
     * Indicates whether the field is required.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#required)
     */
    readonly required: boolean;
    /**
     * The type of input field. Possible values are listed below.Value | Description------|------------number | Input represents a number.text |   Input represents text.date | Input represents a date.unsupported | The field represents an unsupported value. A `blob` field type is an example of this.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#type)
     */
    readonly type: string;
    /**
     * When `true`, the input value is valid. Otherwise, it is invalid.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#valid)
     */
    readonly valid: boolean;
    /**
     * The input's value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#value)
     */
    readonly value: number | string | any;
    /**
     * When `true`, the field is displayed. Otherwise, it is hidden.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#visible)
     */
    readonly visible: boolean;
  }

  interface InputFieldConstructor {
    new (properties?: InputFieldProperties): InputField;
  }

  export const InputField: InputFieldConstructor;

  interface InputFieldProperties {}

  interface InputFieldGroup extends Accessor {
    /**
     * The group's description.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputFieldGroup.html#description)
     */
    description: string;
    /**
     * The result of `visibilityExpression`.Note, if `visibilityExpression` is not defined, the value of this property will be `undefined`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputFieldGroup.html#evaluatedVisibility)
     */
    readonly evaluatedVisibility: boolean;
    /**
     * The input fields belonging to this group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputFieldGroup.html#inputFields)
     */
    readonly inputFields: InputField[];
    /**
     * The group's label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputFieldGroup.html#label)
     */
    readonly label: string;
    /**
     * Arcade expression to determine whether this group is visible or not
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputFieldGroup.html#visibilityExpression)
     *
     * @default null
     */
    visibilityExpression: string;
    /**
     * The group's visibility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputFieldGroup.html#visible)
     */
    readonly visible: boolean;
  }

  interface InputFieldGroupConstructor {
    new (properties?: InputFieldGroupProperties): InputFieldGroup;
  }

  export const InputFieldGroup: InputFieldGroupConstructor;

  interface InputFieldGroupProperties {
    /**
     * The group's description.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputFieldGroup.html#description)
     */
    description?: string;
    /**
     * Arcade expression to determine whether this group is visible or not
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputFieldGroup.html#visibilityExpression)
     *
     * @default null
     */
    visibilityExpression?: string;
  }

  interface FeatureTemplates extends Widget {
    /**
     * When `true`, displays the template [filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#filterFunction).![featureTemplatesFilter](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/featureTemplatesFilter.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#filterEnabled)
     *
     * @default true
     */
    filterEnabled: boolean;
    /**
     * [Function](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#FilterFunction) can be defined to help filter[template items](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html) within the widget.A custom function can be used to aid when searching for templates. It takes a function which passes inan object containing a [name](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html#label)property of the [template item](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html).![featureTemplatesFilterFunction](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/featureTemplatesFilterFunction.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#filterFunction)
     */
    filterFunction: FilterFunction;
    /**
     * Text used to filter items.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#filterText)
     */
    filterText: string;
    /**
     * It is possible to group [template items](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html). This can aidin managing various template items and how they display within the widget. The values are discussed below.Type | Description | Example----- | ----------- | -------layer | This is the *default* grouping. Groups template items by layers. | ![featureTemplatesGroupByLayer](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/groupByLayers.png)geometry | Groups template items by geometry type. | ![FeatureTemplatesGroupByGeometry](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/groupByGeometry.png)none | The widget displays everything in one list with no grouping. | ![featureTemplatesGroupByLayer](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/groupByNone.png)[GroupByFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#GroupByFunction) | Custom function that takes an object containing a [FeatureTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html) and [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html). | ![FeatureTemplatesGroupByCustomGroupFunction](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/groupCustomGroup.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#groupBy)
     *
     * @default layer
     */
    groupBy: string | GroupByFunction;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#layers)
     */
    layers: FeatureLayer[];
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[FeatureTemplatesViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-FeatureTemplatesViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#viewModel)
     */
    viewModel: FeatureTemplatesViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#render)
     *
     *
     */
    render(): any;
  }

  interface FeatureTemplatesConstructor {
    new (properties?: FeatureTemplatesProperties): FeatureTemplates;
  }

  export const FeatureTemplates: FeatureTemplatesConstructor;

  interface FeatureTemplatesProperties extends WidgetProperties {
    /**
     * When `true`, displays the template [filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#filterFunction).![featureTemplatesFilter](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/featureTemplatesFilter.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#filterEnabled)
     *
     * @default true
     */
    filterEnabled?: boolean;
    /**
     * [Function](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#FilterFunction) can be defined to help filter[template items](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html) within the widget.A custom function can be used to aid when searching for templates. It takes a function which passes inan object containing a [name](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html#label)property of the [template item](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html).![featureTemplatesFilterFunction](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/featureTemplatesFilterFunction.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#filterFunction)
     */
    filterFunction?: FilterFunction;
    /**
     * Text used to filter items.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#filterText)
     */
    filterText?: string;
    /**
     * It is possible to group [template items](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html). This can aidin managing various template items and how they display within the widget. The values are discussed below.Type | Description | Example----- | ----------- | -------layer | This is the *default* grouping. Groups template items by layers. | ![featureTemplatesGroupByLayer](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/groupByLayers.png)geometry | Groups template items by geometry type. | ![FeatureTemplatesGroupByGeometry](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/groupByGeometry.png)none | The widget displays everything in one list with no grouping. | ![featureTemplatesGroupByLayer](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/groupByNone.png)[GroupByFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#GroupByFunction) | Custom function that takes an object containing a [FeatureTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html) and [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html). | ![FeatureTemplatesGroupByCustomGroupFunction](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/groupCustomGroup.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#groupBy)
     *
     * @default layer
     */
    groupBy?: string | GroupByFunction;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#layers)
     */
    layers?: FeatureLayerProperties[];
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[FeatureTemplatesViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-FeatureTemplatesViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#viewModel)
     */
    viewModel?: FeatureTemplatesViewModelProperties;
  }

  interface FeatureTemplatesViewModel extends Accessor, Evented {
    /**
     * [Function](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#FilterFunction) can be defined to help filter[template items](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html) within the widget.A custom function can be used to aid when searching for templates. It takes a function which passes inan object containing a [name](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html#label)property of the [template item](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html).![featureTemplatesFilterFunction](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/featureTemplatesFilterFunction.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-FeatureTemplatesViewModel.html#filterFunction)
     */
    filterFunction: FilterFunction;
    /**
     * It is possible to group [template items](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html). This can aidin managing various template items and how they display within the widget. The values are discussed below.Type | Description | Example----- | ----------- | -------layer | This is the *default* grouping. Groups template items by layers. | ![featureTemplatesGroupByLayer](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/groupByLayers.png)geometry | Groups template items by geometry type. | ![FeatureTemplatesGroupByGeometry](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/groupByGeometry.png)none | The widget displays everything in one list with no grouping. | ![featureTemplatesGroupByLayer](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/groupByNone.png)[GroupByFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#GroupByFunction) | Custom function that takes an object containing a [FeatureTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html) and [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html). | ![FeatureTemplatesGroupByCustomGroupFunction](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/groupCustomGroup.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-FeatureTemplatesViewModel.html#groupBy)
     *
     * @default layer
     */
    groupBy: string | GroupByFunction;
    /**
     * The template items or grouped template items.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-FeatureTemplatesViewModel.html#items)
     */
    readonly items: TemplateItem[] | TemplateItemGroup[];
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-FeatureTemplatesViewModel.html#layers)
     */
    layers: FeatureLayer[];
    /**
     * The widget's state. Possible values are in the table below.Value | Description------|------------ready | Dependencies are met and has valid property values.loading | Layers are still loading and not ready yet.disabled | No layers are available to load.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-FeatureTemplatesViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;

    /**
     * This method updates the [template items](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html) with the provided filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-FeatureTemplatesViewModel.html#refresh)
     *
     *
     */
    refresh(): void;
    /**
     * Selects the [template item](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html) to use.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-FeatureTemplatesViewModel.html#select)
     *
     * @param item The [template item](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html) to select.
     *
     */
    select(item?: TemplateItem): void;
  }

  interface FeatureTemplatesViewModelConstructor {
    new (properties?: FeatureTemplatesViewModelProperties): FeatureTemplatesViewModel;
  }

  export const FeatureTemplatesViewModel: FeatureTemplatesViewModelConstructor;

  interface FeatureTemplatesViewModelProperties {
    /**
     * [Function](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#FilterFunction) can be defined to help filter[template items](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html) within the widget.A custom function can be used to aid when searching for templates. It takes a function which passes inan object containing a [name](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html#label)property of the [template item](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html).![featureTemplatesFilterFunction](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/featureTemplatesFilterFunction.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-FeatureTemplatesViewModel.html#filterFunction)
     */
    filterFunction?: FilterFunction;
    /**
     * It is possible to group [template items](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html). This can aidin managing various template items and how they display within the widget. The values are discussed below.Type | Description | Example----- | ----------- | -------layer | This is the *default* grouping. Groups template items by layers. | ![featureTemplatesGroupByLayer](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/groupByLayers.png)geometry | Groups template items by geometry type. | ![FeatureTemplatesGroupByGeometry](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/groupByGeometry.png)none | The widget displays everything in one list with no grouping. | ![featureTemplatesGroupByLayer](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/groupByNone.png)[GroupByFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#GroupByFunction) | Custom function that takes an object containing a [FeatureTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html) and [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html). | ![FeatureTemplatesGroupByCustomGroupFunction](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/groupCustomGroup.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-FeatureTemplatesViewModel.html#groupBy)
     *
     * @default layer
     */
    groupBy?: string | GroupByFunction;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-FeatureTemplatesViewModel.html#layers)
     */
    layers?: FeatureLayerProperties[];
  }

  interface TemplateItem extends Accessor {
    /**
     * The description that is displayed for the template item.This is similar to the description provided in [FeatureTemplate.description](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#description).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html#description)
     */
    description: string;
    /**
     * The label that is displayed for the template item.This is similar to the name provided in [FeatureTemplate.name](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#name).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html#label)
     */
    label: string;
    /**
     * The [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) associated with the template item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html#layer)
     */
    layer: FeatureLayer;
    /**
     * The associated [FeatureTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html) for the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html#template)
     */
    template: FeatureTemplate;
    /**
     * An object used to create a thumbnail image that represents a feature type in the feature template.This is similar to [FeatureTemplate.thumbnail](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#thumbnail).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html#thumbnail)
     */
    readonly thumbnail: HTMLElement;

    /**
     * Creates a deep clone of the template item object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html#clone)
     *
     *
     */
    clone(): TemplateItem;
    /**
     * Fetches the thumbnail used to display the template item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html#fetchThumbnail)
     *
     *
     */
    fetchThumbnail(): IPromise<any>;
  }

  interface TemplateItemConstructor {
    new (properties?: TemplateItemProperties): TemplateItem;
  }

  export const TemplateItem: TemplateItemConstructor;

  interface TemplateItemProperties {
    /**
     * The description that is displayed for the template item.This is similar to the description provided in [FeatureTemplate.description](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#description).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html#description)
     */
    description?: string;
    /**
     * The label that is displayed for the template item.This is similar to the name provided in [FeatureTemplate.name](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#name).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html#label)
     */
    label?: string;
    /**
     * The [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) associated with the template item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html#layer)
     */
    layer?: FeatureLayerProperties;
    /**
     * The associated [FeatureTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html) for the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html#template)
     */
    template?: FeatureTemplateProperties;
  }

  interface TemplateItemGroup extends Accessor {
    /**
     * An array of [TemplateItems](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html) groupedto display in the [FeatureTemplates](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItemGroup.html#items)
     */
    readonly items: TemplateItem[];
    /**
     * The label displayed in the [FeatureTemplates](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html) widgetindicating the grouped [TemplateItems](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItem.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-TemplateItemGroup.html#label)
     */
    readonly label: string;
  }

  interface TemplateItemGroupConstructor {
    new (properties?: TemplateItemGroupProperties): TemplateItemGroup;
  }

  export const TemplateItemGroup: TemplateItemGroupConstructor;

  interface TemplateItemGroupProperties {}

  export type FilterFunction = (filterName: any) => boolean;

  export type GroupByFunction = (grouping: any) => string | any;

  interface Fullscreen extends Widget {
    /**
     * The [HTMLElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement) to present in fullscreen mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen.html#element)
     */
    element: HTMLElement;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[FullscreenViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen-FullscreenViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen.html#viewModel)
     */
    viewModel: FullscreenViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen.html#render)
     *
     *
     */
    render(): any;
  }

  interface FullscreenConstructor {
    new (properties?: FullscreenProperties): Fullscreen;
  }

  export const Fullscreen: FullscreenConstructor;

  interface FullscreenProperties extends WidgetProperties {
    /**
     * The [HTMLElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement) to present in fullscreen mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen.html#element)
     */
    element?: HTMLElement;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[FullscreenViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen-FullscreenViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen.html#viewModel)
     */
    viewModel?: FullscreenViewModelProperties;
  }

  interface FullscreenViewModel extends Accessor {
    /**
     * The [HTMLElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement) to present in fullscreen mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen-FullscreenViewModel.html#element)
     */
    element: HTMLElement;
    /**
     * The view model's state.**Possible Values:** active | ready | feature-unsupported | disabled
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen-FullscreenViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * The view associated with the widget instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen-FullscreenViewModel.html#view)
     */
    view: MapView | SceneView;

    /**
     * Enter fullscreen
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen-FullscreenViewModel.html#enter)
     *
     *
     */
    enter(): void;
    /**
     * Exit fullscreen
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen-FullscreenViewModel.html#exit)
     *
     *
     */
    exit(): void;
    /**
     * Toggle fullscreen
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen-FullscreenViewModel.html#toggle)
     *
     *
     */
    toggle(): void;
  }

  interface FullscreenViewModelConstructor {
    new (properties?: FullscreenViewModelProperties): FullscreenViewModel;
  }

  export const FullscreenViewModel: FullscreenViewModelConstructor;

  interface FullscreenViewModelProperties {
    /**
     * The [HTMLElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement) to present in fullscreen mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen-FullscreenViewModel.html#element)
     */
    element?: HTMLElement;
    /**
     * The view associated with the widget instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen-FullscreenViewModel.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
  }

  interface Histogram extends Widget {
    /**
     * The statistical average of the data in the histogram. You would typicallyget this value from the `avg` property ofSummaryStatisticsResult,which is the result of the[summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.When set, this value will render on the histogram with a symbol indicating it is the average.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#average)
     */
    average: number;
    /**
     * Function for styling bars representing histogram bins.This can be used to color bins with the same color of features in theview that fall into bins representing the same range of data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#barCreatedFunction)
     */
    barCreatedFunction: BarCreatedFunction;
    /**
     * An array of objects representing each bin in the histogram. Thisinformation is typically returned from the[histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#bins)
     */
    bins: Bin[];
    /**
     * Function that fires each time a data line is created.You can use this to style individual [dataLines](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#dataLines) on the data axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#dataLineCreatedFunction)
     */
    dataLineCreatedFunction: DataLineCreatedFunction;
    /**
     * When set, renders lines on the histogram that indicate important ormeaningful values to the end user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#dataLines)
     */
    dataLines: HistogramDataLines[];
    /**
     * A function used to format labels on the histogram. Overrides the default label formatter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#labelFormatFunction)
     */
    labelFormatFunction: LabelFormatter;
    /**
     * Determines the orientation of the Histogram widget.**Possible Values:** vertical | horizontal
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#layout)
     *
     * @default horizontal
     */
    layout: string;
    /**
     * The maximum value or bound of the entire histogram. Thisshould match the maximum bound of the last [bin](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#bins).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#max)
     */
    max: number;
    /**
     * The minimum value or bound of the entire histogram. Thisshould match the minimum bound of the first [bin](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#bins).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#min)
     */
    min: number;
    /**
     * The state of the widget.**Possible Values:** ready | disabled
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#state)
     */
    readonly state: string;
    /**
     * The view model for the Histogram widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[HistogramViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html)class to access all properties and methods on the Histogram widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#viewModel)
     */
    viewModel: HistogramViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#render)
     *
     *
     */
    render(): any;
  }

  interface HistogramConstructor {
    new (properties?: HistogramProperties): Histogram;

    /**
     * A convenience function used to create a Histogram widget instance from the result ofthe [histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html) statisticsfunction.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#fromHistogramResult)
     *
     * @param result The result of the [histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html) statistics  function used to generate a histogram for a field or expression from a layer.
     *
     */
    fromHistogramResult(result: HistogramResult): Histogram;
  }

  export const Histogram: HistogramConstructor;

  interface HistogramProperties extends WidgetProperties {
    /**
     * The statistical average of the data in the histogram. You would typicallyget this value from the `avg` property ofSummaryStatisticsResult,which is the result of the[summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.When set, this value will render on the histogram with a symbol indicating it is the average.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#average)
     */
    average?: number;
    /**
     * Function for styling bars representing histogram bins.This can be used to color bins with the same color of features in theview that fall into bins representing the same range of data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#barCreatedFunction)
     */
    barCreatedFunction?: BarCreatedFunction;
    /**
     * An array of objects representing each bin in the histogram. Thisinformation is typically returned from the[histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#bins)
     */
    bins?: Bin[];
    /**
     * Function that fires each time a data line is created.You can use this to style individual [dataLines](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#dataLines) on the data axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#dataLineCreatedFunction)
     */
    dataLineCreatedFunction?: DataLineCreatedFunction;
    /**
     * When set, renders lines on the histogram that indicate important ormeaningful values to the end user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#dataLines)
     */
    dataLines?: HistogramDataLines[];
    /**
     * A function used to format labels on the histogram. Overrides the default label formatter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#labelFormatFunction)
     */
    labelFormatFunction?: LabelFormatter;
    /**
     * Determines the orientation of the Histogram widget.**Possible Values:** vertical | horizontal
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#layout)
     *
     * @default horizontal
     */
    layout?: string;
    /**
     * The maximum value or bound of the entire histogram. Thisshould match the maximum bound of the last [bin](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#bins).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#max)
     */
    max?: number;
    /**
     * The minimum value or bound of the entire histogram. Thisshould match the minimum bound of the first [bin](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#bins).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#min)
     */
    min?: number;
    /**
     * The view model for the Histogram widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[HistogramViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html)class to access all properties and methods on the Histogram widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#viewModel)
     */
    viewModel?: HistogramViewModelProperties;
  }

  interface HistogramViewModel extends Accessor {
    /**
     * The statistical average of the data in the histogram. You would typicallyget this value from the `avg` property ofSummaryStatisticsResult,which is the result of the[summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.When set, this value will render on the histogram with a symbol indicating it is the average.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#average)
     */
    average: number;
    /**
     * The range of values for the histogram calculated from the bins. This is calculated bysubtracting the min value of the first bin from the maxvalue of the last bin.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#binRange)
     */
    readonly binRange: number;
    /**
     * An array of objects representing each bin in the histogram. Thisinformation is typically returned from the[histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#bins)
     */
    bins: Bin[];
    /**
     * A function used to format labels. Overrides the default label formatter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#labelFormatFunction)
     */
    labelFormatFunction: LabelFormatter;
    /**
     * The maximum value or bound of the entire histogram. Thisshould match the maximum bound of the last [bin](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#bins).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#max)
     */
    max: number;
    /**
     * The minimum value or bound of the entire histogram. Thisshould match the minimum bound of the first [bin](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#bins).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#min)
     */
    min: number;
    /**
     * The range of values for the histogram. This is calculated bysubtracting the [min](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#min) from the [max](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#max).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#range)
     */
    readonly range: number;
    /**
     * The current state of the view model.**Possible Values:** ready | disabled
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#state)
     */
    readonly state: string;
  }

  interface HistogramViewModelConstructor {
    new (properties?: HistogramViewModelProperties): HistogramViewModel;
  }

  export const HistogramViewModel: HistogramViewModelConstructor;

  interface HistogramViewModelProperties {
    /**
     * The statistical average of the data in the histogram. You would typicallyget this value from the `avg` property ofSummaryStatisticsResult,which is the result of the[summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.When set, this value will render on the histogram with a symbol indicating it is the average.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#average)
     */
    average?: number;
    /**
     * An array of objects representing each bin in the histogram. Thisinformation is typically returned from the[histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#bins)
     */
    bins?: Bin[];
    /**
     * A function used to format labels. Overrides the default label formatter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#labelFormatFunction)
     */
    labelFormatFunction?: LabelFormatter;
    /**
     * The maximum value or bound of the entire histogram. Thisshould match the maximum bound of the last [bin](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#bins).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#max)
     */
    max?: number;
    /**
     * The minimum value or bound of the entire histogram. Thisshould match the minimum bound of the first [bin](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#bins).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#min)
     */
    min?: number;
  }

  export type BarCreatedFunction = (index: number, element: any) => void;

  /**
   * Represents the bin of a histogram. A bin consists ofa minimum and a maximum value and a count. It indicates thenumber of values in a dataset that lie between themin and max values.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#Bin)
   */
  export interface Bin extends Object {
    /**
     * The number of values in a dataset that are  contained between the indicated `minValue` and `maxValue`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#Bin)
     */
    count: number;
    /**
     * The minimum value (or bound) of the bin.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#Bin)
     */
    minValue: number;
    /**
     * The maximum value (or bound) of the bin.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#Bin)
     */
    maxValue: number;
  }

  export type DataLineCreatedFunction = (lineElement: any, labelElement?: any, index?: number) => void;

  export interface HistogramDataLines extends Object {
    /**
     * The value on the data axis of the histogram where a line will be rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#dataLines)
     */
    value: number;
    /**
     * The label associated with the line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#dataLines)
     */
    label?: string | number;
  }

  export type LabelFormatter = (value: number, type?: string, index?: number) => string;

  interface HistogramRangeSlider extends Widget {
    /**
     * The statistical average of the data in the histogram. You would typicallyget this value from the `avg` property ofSummaryStatisticsResult,which is the result of the[summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.When set, this value will render on the histogram with a line and an average symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#average)
     */
    average: number;
    /**
     * Function for styling bars representing histogram bins.This can be used to color bins with the same color of features in theview that fall into bins representing the same range of data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#barCreatedFunction)
     */
    barCreatedFunction: BarCreatedFunction;
    /**
     * An array of objects representing each bin in the histogram. Thisinformation is typically returned from the[histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#bins)
     */
    bins: Bin[];
    /**
     * Function that fires each time a data line is created.You can use this to style individual [dataLines](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#dataLines) on the data axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#dataLineCreatedFunction)
     */
    dataLineCreatedFunction: DataLineCreatedFunction;
    /**
     * When set, renders lines on the histogram that indicate important ormeaningful values to the end user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#dataLines)
     */
    dataLines: HistogramRangeSliderDataLines[];
    /**
     * Sets the color of the histogram bars that are excluded based on the specified[rangeType](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#rangeType). For example, when a rangeType of `between` is used,all bars **not** between the slider thumbs will be rendered with the color set here.To change the style of histogram bars representing included data based on the[rangeType](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#rangeType), use the [includedBarColor](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#includedBarColor) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#excludedBarColor)
     *
     * @default #d7e5f0
     */
    excludedBarColor: Color;
    /**
     * Sets the color of the histogram bars that are included in the specified[rangeType](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#rangeType). For example, when a rangeType of `between` is used,all bars between the slider thumbs will be rendered with the color set here.To change the style of histogram bars representing excluded data based on the[rangeType](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#rangeType), use the [excludedBarColor](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#excludedBarColor) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#includedBarColor)
     *
     * @default #599dd4
     */
    includedBarColor: Color;
    /**
     * A function used to format labels. Overrides the default label formatter.By default labels are formatted in the following way:- When the data range is less than `10` (`(max - min) < 10`), labels  are rounded based on the value set in the [precision](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#precision) property.- When the data range is larger than `10`, [labels](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#labels) display with a precision of  no more than two decimal places, though actual slider thumb values will maintain the  precision specified in [precision](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#precision).Use this property to override the behavior defined above.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#labelFormatFunction)
     */
    labelFormatFunction: SliderLabelFormatter;
    /**
     * The maximum value or upper bound of the slider. If the largestslider [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#values) _in the constructor_ is greater than the `maxValue` set inthis property, then the `maxValue` will update to match the largestslider [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#values).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#max)
     */
    max: number;
    /**
     * The minimum value or lower bound of the slider. If the smallestslider [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#values) _in the constructor_ is greater than the `minValue` set inthis property, then the `minValue` will update to match the smallestslider [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#values).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#min)
     */
    min: number;
    /**
     * Defines how slider thumb values should be rounded. This number indicates the numberof decimal places slider thumb values should round to when they have been moved.This value also indicates the precision of thumb [labels](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#labels) when the data range([max](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#max) - [min](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#min)) is less than `10`.When the data range is larger than `10`, [labels](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#labels) display with a precision ofno more than two decimal places, though actual slider thumb values will maintain theprecision specified in this property.For example, given the default precision of `4`, and the following slider configuration,The label of the thumb will display two decimal places, but the precision of the actualthumb value will not be lost even when the user slides or moves the thumb.```jsconst slider = new HistogramRangeSliderViewModel({  min: 20,  max: 100,  // data range of 80  values: [50.4331],  // thumb label will display 50.43  // thumb value will maintain precision, so  // value will remain at 50.4331});```If the user manually enters a value that has a higher precision than what's indicated bythis property, the precision of that thumb value will be maintained until the thumbis moved by the user. At that point, the value will be rounded according to the indicated precision.Keep in mind this property rounds thumb [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#values) and shouldn't be used exclusivelyfor formatting purposes. To format thumb `labels`, use the [labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#labelFormatFunction)property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#precision)
     *
     * @default 4
     */
    precision: number;
    /**
     * Indicates how the histogram bins should be rendered as the user slides the thumbs. By default,blue bars indicate data bins included in the range. Gray bars indicate data bins excluded fromthe range. These colors can be customized with the [includedBarColor](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#includedBarColor) and[excludedBarColor](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#includedBarColor) properties.This property also determines the SQL where clause generated in [generateWhereClause()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#generateWhereClause)for filtering purposes. The value set here determines the number of [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#values)allowed on the slider.**Possible Values:** equal | not-equal | less-than | greater-than | at-most | at-least | between | not-betweenSee the table below for a description and requirements of all possible values. `value1` refers tothe value of the first thumb position. `value2` refers to the value of the final thumb position, if applicable.Possible Value | Number of [Values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#values) | [Where clause](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#generateWhereClause)---------------|----------------------------|----------------------equal | 1 | `${field} = ${value1}`not-equal | 1 | `${field} <> ${value1}`less-than | 1 | `${field} < ${value1}`greater-than | 1 | `${field} > ${value1}`at-most | 1 | `${field} <= ${value1}`at-least | 1 | `${field} >= ${value1}`between | 2 | `${field} BETWEEN ${value1} AND ${value2}`not-between | 2 | `${field} NOT BETWEEN ${value1} AND ${value2}`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#rangeType)
     */
    rangeType: string;
    /**
     * Indicates the standard deviation of the dataset.When set, computed [dataLines](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#dataLines) will render on the histogramat the location of the given standard deviationabove and below the `average`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#standardDeviation)
     */
    standardDeviation: number;
    /**
     * Indicates the number of standard deviation lines to render on the histogramfrom the [average].
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#standardDeviationCount)
     *
     * @default 1
     */
    standardDeviationCount: number;
    /**
     * An array of either one or two numbers representing thumb positions on the slider.The number of values that should be indicated here depends on the associated [rangeType](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#rangeType).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#values)
     */
    values: number[];
    /**
     * The view model for the widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See theesri/widgets/HistogramRangeSlider/HistogramRangeSliderViewModelclass to access all properties and methods on the Slider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#viewModel)
     */
    viewModel: HistogramRangeSliderViewModel;

    /**
     * Generates a SQL where clause based on a given field and the slider's[rangeType](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#rangeType). This is a convenience function for data filteringor data queries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#generateWhereClause)
     *
     * @param field Name of the field used in the where clause. This  field should correspond to the data used to generate the histogram  associated with the slider.
     *
     */
    generateWhereClause(field: string): string;
    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#render)
     *
     *
     */
    render(): any;
  }

  interface HistogramRangeSliderConstructor {
    new (properties?: HistogramRangeSliderProperties): HistogramRangeSlider;
  }

  export const HistogramRangeSlider: HistogramRangeSliderConstructor;

  interface HistogramRangeSliderProperties extends WidgetProperties {
    /**
     * The statistical average of the data in the histogram. You would typicallyget this value from the `avg` property ofSummaryStatisticsResult,which is the result of the[summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.When set, this value will render on the histogram with a line and an average symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#average)
     */
    average?: number;
    /**
     * Function for styling bars representing histogram bins.This can be used to color bins with the same color of features in theview that fall into bins representing the same range of data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#barCreatedFunction)
     */
    barCreatedFunction?: BarCreatedFunction;
    /**
     * An array of objects representing each bin in the histogram. Thisinformation is typically returned from the[histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#bins)
     */
    bins?: Bin[];
    /**
     * Function that fires each time a data line is created.You can use this to style individual [dataLines](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#dataLines) on the data axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#dataLineCreatedFunction)
     */
    dataLineCreatedFunction?: DataLineCreatedFunction;
    /**
     * When set, renders lines on the histogram that indicate important ormeaningful values to the end user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#dataLines)
     */
    dataLines?: HistogramRangeSliderDataLines[];
    /**
     * Sets the color of the histogram bars that are excluded based on the specified[rangeType](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#rangeType). For example, when a rangeType of `between` is used,all bars **not** between the slider thumbs will be rendered with the color set here.To change the style of histogram bars representing included data based on the[rangeType](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#rangeType), use the [includedBarColor](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#includedBarColor) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#excludedBarColor)
     *
     * @default #d7e5f0
     */
    excludedBarColor?: Color | number[] | string;
    /**
     * Sets the color of the histogram bars that are included in the specified[rangeType](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#rangeType). For example, when a rangeType of `between` is used,all bars between the slider thumbs will be rendered with the color set here.To change the style of histogram bars representing excluded data based on the[rangeType](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#rangeType), use the [excludedBarColor](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#excludedBarColor) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#includedBarColor)
     *
     * @default #599dd4
     */
    includedBarColor?: Color | number[] | string;
    /**
     * A function used to format labels. Overrides the default label formatter.By default labels are formatted in the following way:- When the data range is less than `10` (`(max - min) < 10`), labels  are rounded based on the value set in the [precision](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#precision) property.- When the data range is larger than `10`, [labels](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#labels) display with a precision of  no more than two decimal places, though actual slider thumb values will maintain the  precision specified in [precision](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#precision).Use this property to override the behavior defined above.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#labelFormatFunction)
     */
    labelFormatFunction?: SliderLabelFormatter;
    /**
     * The maximum value or upper bound of the slider. If the largestslider [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#values) _in the constructor_ is greater than the `maxValue` set inthis property, then the `maxValue` will update to match the largestslider [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#values).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#max)
     */
    max?: number;
    /**
     * The minimum value or lower bound of the slider. If the smallestslider [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#values) _in the constructor_ is greater than the `minValue` set inthis property, then the `minValue` will update to match the smallestslider [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#values).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#min)
     */
    min?: number;
    /**
     * Defines how slider thumb values should be rounded. This number indicates the numberof decimal places slider thumb values should round to when they have been moved.This value also indicates the precision of thumb [labels](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#labels) when the data range([max](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#max) - [min](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#min)) is less than `10`.When the data range is larger than `10`, [labels](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#labels) display with a precision ofno more than two decimal places, though actual slider thumb values will maintain theprecision specified in this property.For example, given the default precision of `4`, and the following slider configuration,The label of the thumb will display two decimal places, but the precision of the actualthumb value will not be lost even when the user slides or moves the thumb.```jsconst slider = new HistogramRangeSliderViewModel({  min: 20,  max: 100,  // data range of 80  values: [50.4331],  // thumb label will display 50.43  // thumb value will maintain precision, so  // value will remain at 50.4331});```If the user manually enters a value that has a higher precision than what's indicated bythis property, the precision of that thumb value will be maintained until the thumbis moved by the user. At that point, the value will be rounded according to the indicated precision.Keep in mind this property rounds thumb [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#values) and shouldn't be used exclusivelyfor formatting purposes. To format thumb `labels`, use the [labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#labelFormatFunction)property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#precision)
     *
     * @default 4
     */
    precision?: number;
    /**
     * Indicates how the histogram bins should be rendered as the user slides the thumbs. By default,blue bars indicate data bins included in the range. Gray bars indicate data bins excluded fromthe range. These colors can be customized with the [includedBarColor](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#includedBarColor) and[excludedBarColor](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#includedBarColor) properties.This property also determines the SQL where clause generated in [generateWhereClause()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#generateWhereClause)for filtering purposes. The value set here determines the number of [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#values)allowed on the slider.**Possible Values:** equal | not-equal | less-than | greater-than | at-most | at-least | between | not-betweenSee the table below for a description and requirements of all possible values. `value1` refers tothe value of the first thumb position. `value2` refers to the value of the final thumb position, if applicable.Possible Value | Number of [Values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#values) | [Where clause](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#generateWhereClause)---------------|----------------------------|----------------------equal | 1 | `${field} = ${value1}`not-equal | 1 | `${field} <> ${value1}`less-than | 1 | `${field} < ${value1}`greater-than | 1 | `${field} > ${value1}`at-most | 1 | `${field} <= ${value1}`at-least | 1 | `${field} >= ${value1}`between | 2 | `${field} BETWEEN ${value1} AND ${value2}`not-between | 2 | `${field} NOT BETWEEN ${value1} AND ${value2}`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#rangeType)
     */
    rangeType?: string;
    /**
     * Indicates the standard deviation of the dataset.When set, computed [dataLines](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#dataLines) will render on the histogramat the location of the given standard deviationabove and below the `average`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#standardDeviation)
     */
    standardDeviation?: number;
    /**
     * Indicates the number of standard deviation lines to render on the histogramfrom the [average].
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#standardDeviationCount)
     *
     * @default 1
     */
    standardDeviationCount?: number;
    /**
     * An array of either one or two numbers representing thumb positions on the slider.The number of values that should be indicated here depends on the associated [rangeType](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#rangeType).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#values)
     */
    values?: number[];
    /**
     * The view model for the widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See theesri/widgets/HistogramRangeSlider/HistogramRangeSliderViewModelclass to access all properties and methods on the Slider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#viewModel)
     */
    viewModel?: HistogramRangeSliderViewModelProperties;
  }

  interface HistogramRangeSliderViewModel extends SliderViewModel {
    /**
     * The statistical average of the data in the histogram. You would typicallyget this value from the `avg` property ofSummaryStatisticsResult,which is the result of the[summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#average)
     */
    average: number;
    /**
     * An array of objects representing each bin in the histogram. Thisinformation is typically returned from the[histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#bins)
     */
    bins: Bin[];
    /**
     * Determines the SQL where clause generated in [generateWhereClause()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#generateWhereClause)for filtering purposes. The value set here determines the number of [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#values)allowed on the slider.**Possible Values:** equal | not-equal | less-than | greater-than | at-most | at-least | between | not-betweenSee the table below for a description and requirements of all possible values. `value1` refers tothe value of the first thumb position. `value2` refers to the value of the final thumb position, if applicable.Possible Value | Number of [Values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#values) | [Where clause](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#generateWhereClause)---------------|----------------------------|----------------------equal | 1 | `${field} = ${value1}`not-equal | 1 | `${field} <> ${value1}`less-than | 1 | `${field} < ${value1}`greater-than | 1 | `${field} > ${value1}`at-most | 1 | `${field} <= ${value1}`at-least | 1 | `${field} >= ${value1}`between | 2 | `${field} BETWEEN ${value1} AND ${value2}`not-between | 2 | `${field} NOT BETWEEN ${value1} AND ${value2}`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#rangeType)
     *
     * @default equal
     */
    rangeType: any;
    /**
     * Indicates the standard deviation of the datasetabove and below the `average`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#standardDeviation)
     */
    standardDeviation: number;

    /**
     * Generates a SQL where clause based on a given field and the slider's[rangeType](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#rangeType). This is a convenience function for data filteringor data queries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#generateWhereClause)
     *
     * @param field Name of the field used in the where clause. This  field should correspond to the data used to generate the histogram  associated with the slider.
     *
     */
    generateWhereClause(field: string): string;

    on(name: "max-change", eventHandler: HistogramRangeSliderViewModelMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: HistogramRangeSliderViewModelMinChangeEventHandler): IHandle;

    on(name: "value-change", eventHandler: HistogramRangeSliderViewModelValueChangeEventHandler): IHandle;
  }

  interface HistogramRangeSliderViewModelConstructor {
    new (properties?: HistogramRangeSliderViewModelProperties): HistogramRangeSliderViewModel;
  }

  export const HistogramRangeSliderViewModel: HistogramRangeSliderViewModelConstructor;

  interface HistogramRangeSliderViewModelProperties extends SliderViewModelProperties {
    /**
     * The statistical average of the data in the histogram. You would typicallyget this value from the `avg` property ofSummaryStatisticsResult,which is the result of the[summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-summaryStatistics.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#average)
     */
    average?: number;
    /**
     * An array of objects representing each bin in the histogram. Thisinformation is typically returned from the[histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#bins)
     */
    bins?: Bin[];
    /**
     * Determines the SQL where clause generated in [generateWhereClause()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#generateWhereClause)for filtering purposes. The value set here determines the number of [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#values)allowed on the slider.**Possible Values:** equal | not-equal | less-than | greater-than | at-most | at-least | between | not-betweenSee the table below for a description and requirements of all possible values. `value1` refers tothe value of the first thumb position. `value2` refers to the value of the final thumb position, if applicable.Possible Value | Number of [Values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#values) | [Where clause](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#generateWhereClause)---------------|----------------------------|----------------------equal | 1 | `${field} = ${value1}`not-equal | 1 | `${field} <> ${value1}`less-than | 1 | `${field} < ${value1}`greater-than | 1 | `${field} > ${value1}`at-most | 1 | `${field} <= ${value1}`at-least | 1 | `${field} >= ${value1}`between | 2 | `${field} BETWEEN ${value1} AND ${value2}`not-between | 2 | `${field} NOT BETWEEN ${value1} AND ${value2}`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#rangeType)
     *
     * @default equal
     */
    rangeType?: any;
    /**
     * Indicates the standard deviation of the datasetabove and below the `average`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#standardDeviation)
     */
    standardDeviation?: number;
  }

  export interface HistogramRangeSliderViewModelMaxChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface HistogramRangeSliderViewModelMinChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface HistogramRangeSliderViewModelValueChangeEvent {
    index: number;

    oldValue: number;

    type: string;

    value: number;
  }

  export interface HistogramRangeSliderDataLines extends Object {
    /**
     * The value on the data axis of the histogram where a line will be rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#dataLines)
     */
    value: number;
    /**
     * The label associated with the line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#dataLines)
     */
    label?: string | number;
  }

  interface Home extends Widget, GoTo {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home.html#iconClass)
     */
    iconClass: string;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[HomeViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home-HomeViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home.html#viewModel)
     */
    viewModel: HomeViewModel;
    /**
     * The [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html), or point of view, to zoom to whengoing home. The initial value is determined a few different ways:* If no [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) is provided, the value is `null`.* If the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) is ready, but the [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) is not defined, the  initialvalue of the [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) is determined when the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) became ready.* If the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) is ready and the [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) is defined by the user, the initial viewpoint value is the user-defined [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home.html#viewpoint)
     */
    viewpoint: Viewpoint;

    /**
     * This function provides the ability to interrupt and cancel the processof navigating the view back to the view's initial extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home.html#cancelGo)
     *
     *
     */
    cancelGo(): void;
    /**
     * Animates the view to the initial Viewpoint of the view or thevalue of [viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home.html#viewpoint).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home.html#go)
     *
     *
     */
    go(): void;
    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home.html#render)
     *
     *
     */
    render(): any;
  }

  interface HomeConstructor {
    new (properties?: HomeProperties): Home;
  }

  export const Home: HomeConstructor;

  interface HomeProperties extends WidgetProperties, GoToProperties {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home.html#iconClass)
     */
    iconClass?: string;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[HomeViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home-HomeViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home.html#viewModel)
     */
    viewModel?: HomeViewModelProperties;
    /**
     * The [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html), or point of view, to zoom to whengoing home. The initial value is determined a few different ways:* If no [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) is provided, the value is `null`.* If the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) is ready, but the [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) is not defined, the  initialvalue of the [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) is determined when the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) became ready.* If the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) is ready and the [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) is defined by the user, the initial viewpoint value is the user-defined [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home.html#viewpoint)
     */
    viewpoint?: ViewpointProperties;
  }

  interface HomeViewModel extends Accessor, Evented, GoTo {
    /**
     * The current state of the widget.**Possible Values:** disabled | ready | going-home
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home-HomeViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * The view associated with the widget instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home-HomeViewModel.html#view)
     */
    view: MapView | SceneView;
    /**
     * The [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html), or point of view, to zoom to whengoing home. The initial value is determined a few different ways:* If no [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) is provided, the value is `null`.* If the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) is ready, but the [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) is not defined, the  initialvalue of the [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) is determined when the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) became ready.* If the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) is ready and the [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) is defined by the user, the initial viewpoint value is the user-defined [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home-HomeViewModel.html#viewpoint)
     *
     * @default null
     */
    viewpoint: Viewpoint;

    /**
     * This function provides the ability to interrupt and cancel the processof navigating the view back to the view's initial extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home-HomeViewModel.html#cancelGo)
     *
     *
     */
    cancelGo(): void;
    /**
     * Animates the view to the initial [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) of the view or thevalue of [viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home-HomeViewModel.html#viewpoint).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home-HomeViewModel.html#go)
     *
     *
     */
    go(): void;
  }

  interface HomeViewModelConstructor {
    new (properties?: HomeViewModelProperties): HomeViewModel;
  }

  export const HomeViewModel: HomeViewModelConstructor;

  interface HomeViewModelProperties extends GoToProperties {
    /**
     * The view associated with the widget instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home-HomeViewModel.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * The [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html), or point of view, to zoom to whengoing home. The initial value is determined a few different ways:* If no [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) is provided, the value is `null`.* If the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) is ready, but the [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) is not defined, the  initialvalue of the [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) is determined when the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) became ready.* If the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) is ready and the [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) is defined by the user, the initial viewpoint value is the user-defined [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home-HomeViewModel.html#viewpoint)
     *
     * @default null
     */
    viewpoint?: ViewpointProperties;
  }

  interface LayerList extends Widget {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#iconClass)
     */
    iconClass: string;
    /**
     * Specifies a function that accesses each [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html).Each list item can be modifiedaccording to its modifiable properties. Actions can be added to list itemsusing the [actionsSections](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#actionsSections)property of the ListItem.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#listItemCreatedFunction)
     */
    listItemCreatedFunction: ListItemCreatedHandler;
    /**
     * A collection of [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html)s representing operational layers.To hide layers from the LayerList widget, set the[listMode](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#listMode) property on the layer(s) to `hide`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#operationalItems)
     */
    readonly operationalItems: Collection<ListItem>;
    /**
     * A collection of selected [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html)s representing operational layersselected by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#selectedItems)
     */
    readonly selectedItems: Collection<ListItem>;
    /**
     * Indicates whether list items may be selected by the user. When the userselects an item, it will become available in the [selectedItems](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#selectedItems)property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#selectionEnabled)
     *
     * @default false
     */
    selectionEnabled: boolean;
    /**
     * Option for enabling status indicators, which indicate whether or not each layeris loading resources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#statusIndicatorsVisible)
     *
     * @default true
     */
    statusIndicatorsVisible: boolean;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[LayerListViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-LayerListViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#viewModel)
     */
    viewModel: LayerListViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#render)
     *
     *
     */
    render(): any;
    /**
     * Triggers the [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#event-trigger-action) event and executesthe given [action](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html) or [action toggle](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#triggerAction)
     *
     * @param action The action to execute.
     * @param item An item associated with the action.
     *
     */
    triggerAction(action: ActionButton | ActionToggle, item: ListItem): void;
  }

  interface LayerListConstructor {
    new (properties?: LayerListProperties): LayerList;
  }

  export const LayerList: LayerListConstructor;

  interface LayerListProperties extends WidgetProperties {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#iconClass)
     */
    iconClass?: string;
    /**
     * Specifies a function that accesses each [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html).Each list item can be modifiedaccording to its modifiable properties. Actions can be added to list itemsusing the [actionsSections](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#actionsSections)property of the ListItem.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#listItemCreatedFunction)
     */
    listItemCreatedFunction?: ListItemCreatedHandler;
    /**
     * Indicates whether list items may be selected by the user. When the userselects an item, it will become available in the [selectedItems](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#selectedItems)property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#selectionEnabled)
     *
     * @default false
     */
    selectionEnabled?: boolean;
    /**
     * Option for enabling status indicators, which indicate whether or not each layeris loading resources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#statusIndicatorsVisible)
     *
     * @default true
     */
    statusIndicatorsVisible?: boolean;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[LayerListViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-LayerListViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#viewModel)
     */
    viewModel?: LayerListViewModelProperties;
  }

  interface LayerListViewModel extends Accessor {
    /**
     * Specifies a function that accesses each [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html).Each list item can be modifiedaccording to its modifiable propeties. Actions can be added to list itemsusing the [actionsSections](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#actionsSections)property of the ListItem.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-LayerListViewModel.html#listItemCreatedFunction)
     */
    listItemCreatedFunction: Function;
    /**
     * A collection of [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html)s representing operational layers.To hide layers from the LayerList widget, set the[listMode](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#listMode) property on the layer(s) to `hide`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-LayerListViewModel.html#operationalItems)
     */
    readonly operationalItems: Collection<ListItem>;
    /**
     * The view model's state.**Possible Values:** loading | disabled
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-LayerListViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-LayerListViewModel.html#view)
     */
    view: MapView | SceneView;

    /**
     * Triggers the [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-LayerListViewModel.html#event-trigger-action) event and executesthe given [action](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html) or [action toggle](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-LayerListViewModel.html#triggerAction)
     *
     * @param action The action to execute.
     * @param item An item associated with the action.
     *
     */
    triggerAction(action: ActionButton | ActionToggle, item: ListItem): void;
  }

  interface LayerListViewModelConstructor {
    new (properties?: LayerListViewModelProperties): LayerListViewModel;
  }

  export const LayerListViewModel: LayerListViewModelConstructor;

  interface LayerListViewModelProperties {
    /**
     * Specifies a function that accesses each [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html).Each list item can be modifiedaccording to its modifiable propeties. Actions can be added to list itemsusing the [actionsSections](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#actionsSections)property of the ListItem.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-LayerListViewModel.html#listItemCreatedFunction)
     */
    listItemCreatedFunction?: Function;
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-LayerListViewModel.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
  }

  interface ListItem {
    /**
     * Whether the actional panel is open in the LayerList.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#actionsOpen)
     *
     * @default false
     */
    actionsOpen: boolean;
    /**
     * A nested 2-dimensional collection of actions that could be triggered on the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#actionsSections)
     */
    actionsSections: Collection<Collection<ActionButton | ActionToggle>>;
    /**
     * When a layer contains sublayers, this property is a Collection of ListItem objects belonging to the given layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#children)
     */
    children: Collection<ListItem>;
    /**
     * The Error object returned if an error occurred.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#error)
     */
    readonly error: Error;
    /**
     * The layer associated with the triggered action.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#layer)
     *
     * @default null
     */
    layer: Layer;
    /**
     * The [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) displaying data for theassociated [layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#layer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#layerView)
     */
    readonly layerView: LayerView;
    /**
     * Whether the layer is open in the LayerList.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#open)
     *
     * @default false
     */
    open: boolean;
    /**
     * Allows you to display custom content for each ListItemin the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget.A common scenario for using ListItemPanel is to display a [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget withineach list item. The `legend` keyword can be used in the[content](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItemPanel.html#content) property of thepanel to display a legend for each layer in the LayerList.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#panel)
     */
    panel: ListItemPanel;
    /**
     * The parent of this item
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#parent)
     *
     * @default null
     */
    parent: ListItem;
    /**
     * The title of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#title)
     */
    title: string;
    /**
     * Value is `true` when the layer is updating; for example, if it is in the process of fetching data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#updating)
     *
     * @default false
     */
    readonly updating: boolean;
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#view)
     */
    view: MapView | SceneView;
    /**
     * Indicates how to manage the visibility of the children layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#visibilityMode)
     */
    readonly visibilityMode: string;
    /**
     * Indicates if the ListItem is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#visible)
     *
     * @default true
     */
    visible: boolean;
    /**
     * Whether the layer is visible at the current scale or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#visibleAtCurrentScale)
     *
     * @default true
     */
    readonly visibleAtCurrentScale: boolean;

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#clone)
     *
     *
     */
    clone(): ListItem;
  }

  interface ListItemConstructor {
    new (): ListItem;
  }

  export const ListItem: ListItemConstructor;

  interface ListItemPanel {
    /**
     * Adds a CSS class used to style a node that represents the panel. Clicking the node willopen and close the panel. Typically, an icon font is used for this property.[Esri Icon Fonts](https://developers.arcgis.com/javascript/latest/guide/esri-icon-font/index.html) areautomatically made available and can be used to represent this content.To use one of these provided icon fonts, you mustprefix the class name with `esri-`. For example, the default icon font is `esri-icon-layer-list`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItemPanel.html#className)
     *
     * @default esri-icon-layer-list
     */
    className: string;
    /**
     * The content displayed in the ListItem panel. This can be raw text, a[Widget](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html) instance, an HTML Element, or an arrayof any of those elements.If the text `legend` is used, then an instance of the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html)widget is placed in the content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItemPanel.html#content)
     */
    content: Widget | HTMLElement | string | any[];
    /**
     * The URL or data URI of an image used to represent the panel.This property will be used as a background image for the node.If neither `image` nor `className` are specified, a default icon![default icon](https://developers.arcgis.com/javascript/assets/img/guide/whats-new/41/default-action.png) will display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItemPanel.html#image)
     */
    image: string;
    /**
     * The panel's parent ListItem that represents a layer in the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItemPanel.html#listItem)
     */
    listItem: ListItem;
    /**
     * Indicates if the panel's content is open and visible to the user. This isdifferent from the[visible](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItemPanel.html#visible) property, which is used for toggling the visibility of the iconused to control whether the content is expanded or collapsed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItemPanel.html#open)
     *
     * @default false
     */
    open: boolean;
    /**
     * The title of the panel. By default, this title matches theListItem's title. Changing thisvalue will not change the title of the ListItem in the LayerList.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItemPanel.html#title)
     */
    title: string;
    /**
     * Indicates if the node containing the [image](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItemPanel.html#image) or [icon font](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItemPanel.html#className)is visible to the user. Setting this value to `false` will prevent the user fromtoggling the visibility of the panel's content. Use [open](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItemPanel.html#open) to programmatically setthe visibility of the panel's content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItemPanel.html#visible)
     *
     * @default true
     */
    visible: boolean;
  }

  interface ListItemPanelConstructor {
    new (): ListItemPanel;
  }

  export const ListItemPanel: ListItemPanelConstructor;

  export type ListItemCreatedHandler = (event: any) => void;

  interface Legend extends Widget {
    /**
     * Collection of [ActiveLayerInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html) objects used by the legend view todisplay data in the legend. The legend widget watches this property to hide or display the layer's legend whenan [ActiveLayerInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html) is removed from or added to this collection.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#activeLayerInfos)
     */
    activeLayerInfos: Collection<ActiveLayerInfo>;
    /**
     * Indicates whether to show the [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html) layers in the Legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#basemapLegendVisible)
     *
     * @default false
     */
    basemapLegendVisible: boolean;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#iconClass)
     */
    iconClass: string;
    /**
     * Specifies a subset of the layers to display in the legend.If this property is not set, all layers in the map will display in the legend.Objects in this array are defined with the properties listed below.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#layerInfos)
     */
    layerInfos: LegendLayerInfos[];
    /**
     * Indicates the style of the legend. The style determines the legend's layout and behavior.You can either specify a string or an object to indicate the style. The known string values are the same values listed inthe table within the `type` property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#style)
     *
     * @default classic
     */
    style: string | LegendStyle;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[LegendViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-LegendViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#viewModel)
     */
    viewModel: LegendViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#render)
     *
     *
     */
    render(): any;
  }

  interface LegendConstructor {
    new (properties?: LegendProperties): Legend;
  }

  export const Legend: LegendConstructor;

  interface LegendProperties extends WidgetProperties {
    /**
     * Collection of [ActiveLayerInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html) objects used by the legend view todisplay data in the legend. The legend widget watches this property to hide or display the layer's legend whenan [ActiveLayerInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html) is removed from or added to this collection.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#activeLayerInfos)
     */
    activeLayerInfos?: CollectionProperties<ActiveLayerInfoProperties>;
    /**
     * Indicates whether to show the [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html) layers in the Legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#basemapLegendVisible)
     *
     * @default false
     */
    basemapLegendVisible?: boolean;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#iconClass)
     */
    iconClass?: string;
    /**
     * Specifies a subset of the layers to display in the legend.If this property is not set, all layers in the map will display in the legend.Objects in this array are defined with the properties listed below.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#layerInfos)
     */
    layerInfos?: LegendLayerInfos[];
    /**
     * Indicates the style of the legend. The style determines the legend's layout and behavior.You can either specify a string or an object to indicate the style. The known string values are the same values listed inthe table within the `type` property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#style)
     *
     * @default classic
     */
    style?: string | LegendStyle;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[LegendViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-LegendViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#viewModel)
     */
    viewModel?: LegendViewModelProperties;
  }

  interface LegendViewModel extends Accessor {
    /**
     * Collection of [ActiveLayerInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html) objects used by the legend view todisplay data in the legend. Use this property to hide or display the layer's symbols in the legend whenan [ActiveLayerInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html) is removed from or added to this collection.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-LegendViewModel.html#activeLayerInfos)
     */
    activeLayerInfos: Collection<ActiveLayerInfo>;
    /**
     * Indicates whether to show the [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html) layers in the Legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-LegendViewModel.html#basemapLegendVisible)
     *
     * @default filterBasemaps
     */
    basemapLegendVisible: boolean;
    /**
     * Specifies a subset of the layers in the map to display in the legend.If this property is not set, all operational layers in the map will display in the legend.This property can be used to control layer display order in the legend.Objects in this array are defined with the properties listed below.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-LegendViewModel.html#layerInfos)
     */
    layerInfos: LegendViewModelLayerInfos[];
    /**
     * The view model's state.**Possible Values:** ready | disabled
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-LegendViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-LegendViewModel.html#view)
     */
    view: MapView | SceneView;
  }

  interface LegendViewModelConstructor {
    new (properties?: LegendViewModelProperties): LegendViewModel;
  }

  export const LegendViewModel: LegendViewModelConstructor;

  interface LegendViewModelProperties {
    /**
     * Collection of [ActiveLayerInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html) objects used by the legend view todisplay data in the legend. Use this property to hide or display the layer's symbols in the legend whenan [ActiveLayerInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html) is removed from or added to this collection.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-LegendViewModel.html#activeLayerInfos)
     */
    activeLayerInfos?: CollectionProperties<ActiveLayerInfoProperties>;
    /**
     * Indicates whether to show the [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html) layers in the Legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-LegendViewModel.html#basemapLegendVisible)
     *
     * @default filterBasemaps
     */
    basemapLegendVisible?: boolean;
    /**
     * Specifies a subset of the layers in the map to display in the legend.If this property is not set, all operational layers in the map will display in the legend.This property can be used to control layer display order in the legend.Objects in this array are defined with the properties listed below.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-LegendViewModel.html#layerInfos)
     */
    layerInfos?: LegendViewModelLayerInfos[];
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-LegendViewModel.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
  }

  export interface LegendViewModelLayerInfos extends Object {
    /**
     * Specify a title for the layer. If no title is specified the service name is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-LegendViewModel.html#layerInfos)
     */
    title?: string;
    /**
     * A layer to add to the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-LegendViewModel.html#layerInfos)
     */
    layer?: Layer;
  }

  interface ActiveLayerInfo extends Accessor {
    /**
     * A collection of child activeLayerInfos. This only applies to renderers of[Sublayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html) or the childrenof [GroupLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#children)
     */
    children: Collection<ActiveLayerInfo>;
    /**
     * Indicates if the legend's display of the layer's renderer is driven by the scale of the view.This is true of [Sublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html) renderers, any renderer that usesa `valueExpression` (Arcade expression), or another renderer such as [DotDensityRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#isScaleDriven)
     */
    isScaleDriven: boolean;
    /**
     * The layer represented by the ActiveLayerInfo object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#layer)
     */
    layer: Layer;
    /**
     * The legendElements is constructed using the layer [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html). It reflects the actualstructure of the legend. Each `legendElement` has the following specification:
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#legendElements)
     */
    legendElements: LegendElement[];
    /**
     * The ActiveLayerInfo of the parent [Sublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html) or [GroupLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#parent)
     */
    parent: ActiveLayerInfo;
    /**
     * Indicates if the activeLayerInfo is ready. It is set to `true` when all its [legendElements](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#legendElements) are computed.It is set to `false` when the layer renderer changes so that the legendElements can recomputed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ready)
     */
    ready: boolean;
    /**
     * The scale of the view instance in which the Legend is rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#scale)
     */
    scale: number;
    /**
     * The text string that represents the legend's title. This value is read from the `layerInfo` of thecorresponding layer in the legend. If not provided, this value comes from the[title](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#title) of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#title)
     */
    title: string;
    /**
     * The version of the ActiveLayerInfo. It increases by `1` whenever [ready](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ready) property of ActiveLayerInfo changes.This property should watched in the view for ActiveLayerInfo changes and update the DOM accordingly.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#version)
     */
    version: number;
    /**
     * The view in which the Legend is rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#view)
     */
    view: View;
  }

  interface ActiveLayerInfoConstructor {
    new (properties?: ActiveLayerInfoProperties): ActiveLayerInfo;
  }

  export const ActiveLayerInfo: ActiveLayerInfoConstructor;

  interface ActiveLayerInfoProperties {
    /**
     * A collection of child activeLayerInfos. This only applies to renderers of[Sublayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html) or the childrenof [GroupLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#children)
     */
    children?: CollectionProperties<ActiveLayerInfoProperties>;
    /**
     * Indicates if the legend's display of the layer's renderer is driven by the scale of the view.This is true of [Sublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html) renderers, any renderer that usesa `valueExpression` (Arcade expression), or another renderer such as [DotDensityRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#isScaleDriven)
     */
    isScaleDriven?: boolean;
    /**
     * The layer represented by the ActiveLayerInfo object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#layer)
     */
    layer?: LayerProperties;
    /**
     * The legendElements is constructed using the layer [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html). It reflects the actualstructure of the legend. Each `legendElement` has the following specification:
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#legendElements)
     */
    legendElements?: LegendElement[];
    /**
     * The ActiveLayerInfo of the parent [Sublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html) or [GroupLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#parent)
     */
    parent?: ActiveLayerInfoProperties;
    /**
     * Indicates if the activeLayerInfo is ready. It is set to `true` when all its [legendElements](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#legendElements) are computed.It is set to `false` when the layer renderer changes so that the legendElements can recomputed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ready)
     */
    ready?: boolean;
    /**
     * The scale of the view instance in which the Legend is rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#scale)
     */
    scale?: number;
    /**
     * The text string that represents the legend's title. This value is read from the `layerInfo` of thecorresponding layer in the legend. If not provided, this value comes from the[title](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#title) of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#title)
     */
    title?: string;
    /**
     * The version of the ActiveLayerInfo. It increases by `1` whenever [ready](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ready) property of ActiveLayerInfo changes.This property should watched in the view for ActiveLayerInfo changes and update the DOM accordingly.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#version)
     */
    version?: number;
    /**
     * The view in which the Legend is rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#view)
     */
    view?: ViewProperties;
  }

  /**
   * Describes the schema of the ColorRampElement used as a [legendElement](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#legendElement).See the table below for more details of the properties in this object.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ColorRampElement)
   */
  export interface ColorRampElement extends Object {
    /**
     * The type of this element is always `color-ramp`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ColorRampElement)
     */
    type: string;
    /**
     * The title of the color ramp as displayed in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ColorRampElement)
     */
    title: string | RampTitle;
    /**
     * The color of the border surrounding the ramp. This  corresponds with the outline color defined in the default symbol of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ColorRampElement)
     */
    borderColor: Color;
    /**
     * The overlay color of the color ramp. This is typically  transparent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ColorRampElement)
     */
    overlayColor: Color;
    /**
     * The  individual color stops rendered in the legend that correspond to the color visual variable in the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ColorRampElement)
     */
    infos: ColorRampStop[];
  }

  /**
   * Describes the schema of the ColorRampStop element. Each ColorRampStop represents a single stop of the[ColorVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html) referenced in the renderer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ColorRampStop)
   */
  export interface ColorRampStop extends Object {
    /**
     * The label in the legend describing features with the given `color` and `value`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ColorRampStop)
     */
    label: string;
    /**
     * The value of the color visual variable [stop](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html#stops).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ColorRampStop)
     */
    value: number;
    /**
     * The color of the visual variable [stop](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html#stops).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ColorRampStop)
     */
    color: Color;
    /**
     * A number between `0` and `1` describing the position of the label on the color ramp.  For example, in a color ramp with three stops, the first stop would have an offset of `0`, the second `0.5`, and the third  `1`. These offsets are equally spaced for any given number of labels in the color ramp. The interval of  each offset value is equal to 1 divided by the number of stops minus 1.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ColorRampStop)
     */
    offset: number;
  }

  /**
   * Describes the schema of the HeatmapRampElement used as a [legendElement](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#legendElement).See the table below for more details of the properties in this object.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#HeatmapRampElement)
   */
  export interface HeatmapRampElement extends Object {
    /**
     * The type of this element is always `heatmap-ramp`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#HeatmapRampElement)
     */
    type: string;
    /**
     * The title of the heatmap ramp as displayed in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#HeatmapRampElement)
     */
    title?: string | RampTitle;
    /**
     * The  individual color stops rendered in the legend that correspond to the heatmap colorStops in the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#HeatmapRampElement)
     */
    infos: HeatmapRampStop[];
  }

  /**
   * Describes the schema of the HeatmapRampStop element. Each HeatmapRampStop represents a single `colorStop` of the[Heatmap color stops](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#colorStops) referenced in the renderer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#HeatmapRampStop)
   */
  export interface HeatmapRampStop extends Object {
    /**
     * The label of the color stop displayed in the legend. Typically only the first and last  stops have labels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#HeatmapRampStop)
     */
    label: string;
    /**
     * The ratio of a pixel's intensity value to the minPixelIntensity of the renderer.  The ratio of each pixel is matched to the corresponding color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#HeatmapRampStop)
     */
    ratio: number;
    /**
     * The color of the pixel corresponding to the appropriate pixel `ratio`. This value is typically  between `0` and `1`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#HeatmapRampStop)
     */
    color: Color;
    /**
     * A number between `0` and `1` describing the position of the label on the ramp.  For example, in a ramp with three stops, the first stop would have an offset of `0`, the second `0.5`, and the third  `1`. These offset values are equally spaced for any given number of labels in the ramp. The interval of  each offset value is equal to 1 divided by the number of stops minus 1.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#HeatmapRampStop)
     */
    offset: number;
  }

  /**
   * Properties defining the scheme of each of the ImageSymbolTableElementInfo. This applies only toImageryLayer renderers.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ImageSymbolTableElementInfo)
   */
  export interface ImageSymbolTableElementInfo extends Object {
    /**
     * The label of the category corresponding to the given image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ImageSymbolTableElementInfo)
     */
    label?: string;
    /**
     * The data URI of the image representing a colored pixel in the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ImageSymbolTableElementInfo)
     */
    src: string;
    /**
     * The opacity of the image (`0` to `1`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ImageSymbolTableElementInfo)
     */
    opacity: number;
    /**
     * The width of the image in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ImageSymbolTableElementInfo)
     */
    width?: number;
    /**
     * The height of the image in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#ImageSymbolTableElementInfo)
     */
    height?: number;
  }

  /**
   * Properties defining the scheme of each of the supported [legendElements](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#legendElements).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#LegendElement)
   */
  export type LegendElement =
    | SymbolTableElement
    | ColorRampElement
    | OpacityRampElement
    | SizeRampElement
    | HeatmapRampElement
    | RelationshipRampElement;

  /**
   * Describes the schema of the OpacityRampElement used as a [legendElement](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#legendElement).See the table below for more details of the properties in this object.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#OpacityRampElement)
   */
  export interface OpacityRampElement extends Object {
    /**
     * The type of this element is always `opacity-ramp`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#OpacityRampElement)
     */
    type: string;
    /**
     * The title of the opacity ramp as displayed in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#OpacityRampElement)
     */
    title?: string | RampTitle;
    /**
     * The color of the border surrounding the ramp. This  corresponds with the outline color defined in the default symbol of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#OpacityRampElement)
     */
    borderColor: Color;
    /**
     * The overlay color of the color ramp. This is typically  transparent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#OpacityRampElement)
     */
    overlayColor: Color;
    /**
     * The  individual opacity stops rendered in the legend that correspond to the opacity visual variable in the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#OpacityRampElement)
     */
    infos: OpacityRampStop[];
  }

  /**
   * Describes the schema of the OpacityRampStop element. Each OpacityRampStop represents a single stop of the[OpacityVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html) referenced in the renderer. The opacity value ofeach stop is indicated in the [alpha](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#a) property of the `color` object.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#OpacityRampStop)
   */
  export interface OpacityRampStop extends Object {
    /**
     * The label in the legend describing features with the given `color` and `value`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#OpacityRampStop)
     */
    label: string;
    /**
     * The value of the opacity visual variable [stop](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html#stops).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#OpacityRampStop)
     */
    value: number;
    /**
     * The color of the visual variable [stop](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html#stops).  The opacity corresponding to the given `value` is indicated in the [alpha](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#a) property of the color object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#OpacityRampStop)
     */
    color: Color;
    /**
     * A number between `0` and `1` describing the position of the label on the ramp.  For example, in a ramp with three stops, the first stop would have an offset of `0`, the second `0.5`, and the third  `1`. These offsets are equally spaced for any given number of labels in the ramp. The interval of  each offset value is equal to 1 divided by the number of stops minus 1.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#OpacityRampStop)
     */
    offset: number;
  }

  /**
   * Describes the schema of the RampTitle element.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RampTitle)
   */
  export interface RampTitle extends Object {
    /**
     * The field name used in a visual variable of a renderer. This is used in the  generated title of the corresponding ramp in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RampTitle)
     */
    field: string;
    /**
     * If provided, the normalization field name used in a visual variable of a renderer.  This is used in the generated title of the corresponding ramp in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RampTitle)
     */
    normField: string;
    /**
     * If `true`, the legend formats to display the field and normalization field as a ratio.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RampTitle)
     */
    ratio: boolean;
    /**
     * If `true`, the legend formats to display the field and normalization field as a percentage.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RampTitle)
     */
    ratioPercent: boolean;
    /**
     * If `true`, the legend formats to display the field and normalization field as a percentage of total.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RampTitle)
     */
    ratioPercentTotal: boolean;
  }

  /**
   * Describes the schema of the RelationshipLabels element. These labels are rendered in the corners of the squarethat represent the relationship renderer in the legend.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RelationshipLabels)
   */
  export interface RelationshipLabels extends Object {
    /**
     * The label corresponding with the top corner of the legend if the focus  is set to `HH`. This  describes values that are considered high in both field 1 and field 2 (HH).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RelationshipLabels)
     */
    top: string;
    /**
     * The label corresponding with the bottom corner of the legend if the focus is  set to `HH`. This  describes values that are considered low in both field 1 and field 2 (LL).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RelationshipLabels)
     */
    bottom: string;
    /**
     * The label corresponding with the left corner of the legend (if the focus  is set to `HH`). This describes features where the value of field 1 is high and the value of field 2 is low (HL).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RelationshipLabels)
     */
    left: string;
    /**
     * The label corresponding with the right corner of the legend (if the focus  is set to `HH`). This describes features where the value of field 2 is high and the value of field 1 is low (LH).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RelationshipLabels)
     */
    right: string;
  }

  /**
   * Describes the schema of the RelationshipRampElement used as a [legendElement](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#legendElement).See the table below for more details of the properties in this object.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RelationshipRampElement)
   */
  export interface RelationshipRampElement extends Object {
    /**
     * The type of this element is always `relationship-ramp`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RelationshipRampElement)
     */
    type: string;
    /**
     * The number of classes for each field comprising the renderer. Can either  be 2, 3, or 4.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RelationshipRampElement)
     */
    numClasses: number;
    /**
     * Determines the orientation of the Legend. Values can be `HH`, `HL`, `LH`, `LL`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RelationshipRampElement)
     */
    focus: string;
    /**
     * A 2-dimensional array of colors as displayed in the legend grid.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RelationshipRampElement)
     */
    colors: Color[][];
    /**
     * The labels for  each corner of the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RelationshipRampElement)
     */
    labels: RelationshipLabels;
    /**
     * The rotation of the legend in degrees (0-360). `0` degrees displays the legend  as a square with the `LL` cell in the bottom left corner of the legend and the `HH` cell in the top right corner.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RelationshipRampElement)
     */
    rotation: number;
    /**
     * The title of the renderer as displayed in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RelationshipRampElement)
     */
    title?: string;
    /**
     * Info objects associated with the relationship renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RelationshipRampElement)
     */
    infos?: any[];
  }

  /**
   * Describes the schema of the RendererTitle element.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RendererTitle)
   */
  export interface RendererTitle extends Object {
    /**
     * The title of the renderer as displayed in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RendererTitle)
     */
    title?: string;
    /**
     * The field name used in the renderer. This is used in the  generated title of the renderer in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RendererTitle)
     */
    field: string;
    /**
     * If a normalization field is provided to the renderer, this field  is also used in the generated title for the renderer in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RendererTitle)
     */
    normField: string;
    /**
     * Indicates if a percentage is used in the normalization of the  renderer. This is used to create a more readable legend for that scenario.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#RendererTitle)
     */
    normByPct: boolean;
  }

  /**
   * Describes the schema of the SizeRampElement used as a [legendElement](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#legendElement).See the table below for more details of the properties in this object.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SizeRampElement)
   */
  export interface SizeRampElement extends Object {
    /**
     * The type of this element is always `size-ramp`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SizeRampElement)
     */
    type: string;
    /**
     * The title of the size ramp as displayed in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SizeRampElement)
     */
    title?: string | RampTitle;
    /**
     * The  individual size stops rendered in the legend that correspond to the size visual variable in the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SizeRampElement)
     */
    infos: SizeRampStop[];
  }

  /**
   * Describes the schema of the SizeRampStop element. Each SizeRampStop represents a single stop of the[SizeVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html) referenced in the renderer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SizeRampStop)
   */
  export interface SizeRampStop extends Object {
    /**
     * The label in the legend describing features with the given `symbol` and `value`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SizeRampStop)
     */
    label: string;
    /**
     * The value of the size visual variable [stop](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#stops).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SizeRampStop)
     */
    value?: any;
    /**
     * The symbol corresponding to the value of the stop in the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SizeRampStop)
     */
    symbol: Symbol;
    /**
     * The size of the visual variable [stop](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html#stops) in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SizeRampStop)
     */
    size?: number;
    /**
     * The width of the outline in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SizeRampStop)
     */
    outlineSize?: number;
    /**
     * The HTML element rendered in the legend representing features with the given value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SizeRampStop)
     */
    preview?: HTMLElement;
  }

  /**
   * Describes the schema of the SymbolTableElement used as a [legendElement](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#legendElement). Thislegend element is used for [UniqueValueRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html) and[ClassBreaksRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html). See the table below for more details of the properties in this object.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SymbolTableElement)
   */
  export interface SymbolTableElement extends Object {
    /**
     * The type of this element is always `symbol-table`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SymbolTableElement)
     */
    type: string;
    /**
     * The title of the renderer as displayed in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SymbolTableElement)
     */
    title?: string | RendererTitle;
    /**
     * Only used for renderers set to ImageryLayers. Indicates the type of  renderer set on the layer (e.g. `stretched` or `Unique Values`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SymbolTableElement)
     */
    legendType?: string;
    /**
     * An  array of each symbol/category/break rendered for the symbol table. For example, this may be individual  breaks for a ClassBreaksRenderer, or unique values for a UniqueValueRenderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SymbolTableElement)
     */
    infos: SymbolTableElementType[];
  }

  /**
   * Properties defining the scheme of the SymbolTableElementInfo.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SymbolTableElementInfo)
   */
  export interface SymbolTableElementInfo extends Object {
    /**
     * The  title of the renderer as displayed in the Legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SymbolTableElementInfo)
     */
    label: string | RampTitle;
    /**
     * The value corresponding with the given `symbol` in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SymbolTableElementInfo)
     */
    value?: any;
    /**
     * The symbol for the corresponding `value` in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SymbolTableElementInfo)
     */
    symbol: Symbol;
    /**
     * The size of the symbol in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SymbolTableElementInfo)
     */
    size?: number;
    /**
     * A preview of the symbol element as displayed in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SymbolTableElementInfo)
     */
    preview?: HTMLElement;
  }

  /**
   * Properties defining the scheme of each SymbolTableElementType.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#SymbolTableElementType)
   */
  export type SymbolTableElementType = ImageSymbolTableElementInfo | SymbolTableElementInfo;

  export interface LegendLayerInfos extends Object {
    /**
     * Specifies a title for the layer to display above its symbols and descriptions.If no title is specified the service name is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#layerInfos)
     */
    title?: string;
    /**
     * A layer to display in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#layerInfos)
     */
    layer: Layer;
  }

  export interface LegendStyle extends Object {
    /**
     * Specifies the style of the legend. There are two possible values listed in the table below:Value | Description------|------------classic | The legend has a portrait orientation. The user can scroll vertically when many elements are included in the legend's content.card | In wide views, the legend has a landscape orientation that allows users to scroll horizontally to view all legend elements. This style can be responsive, making it ideal for mobile web apps. In smaller views, the legend collapses to occupy less space. One element is shown at a time in a card-style layout, which the user can navigate horizontally.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#style)
     */
    type: string;
    /**
     * When a `card` type is specified, you can specify one of the following layout options.Value | Description------|------------auto | This layout is responsive so that in wide views the legend has a `side-by-side` layout, and a `stack` layout in smaller (mobile) views.side-by-side | The legend has a landscape orientation that allows users to scroll horizontally to view multiple legend cards at a time.stack | The legend cards are stacked, which conserves space, but restricts the user to seeing only one card at a time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#style)
     *
     * @default stack
     */
    layout?: string;
  }

  interface Locate extends Widget, GoTo {
    /**
     * The HTML5 Geolocation Position options for locating. Refer to[Geolocation API Specification](http://www.w3.org/TR/geolocation-API/#position-options)for details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#geolocationOptions)
     *
     * @default { maximumAge: 0, timeout: 15000, enableHighAccuracy: true }
     */
    geolocationOptions: any;
    /**
     * Indicates whether the widget should navigate the view to the position and scale of the geolocated result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#goToLocationEnabled)
     *
     * @default true
     */
    goToLocationEnabled: boolean;
    /**
     * The graphic used to show the user's location on the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#graphic)
     */
    graphic: Graphic;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#iconClass)
     */
    iconClass: string;
    /**
     * Indicates the scale to set on the view when navigating to the position of the geolocatedresult once a location is returned from the [track](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#event-track) event.If a scale value is not explicitly set, then the view will navigate to a default scale of `2500`.For 2D views the value should be within the [effectiveMinScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)and [effectiveMaxScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#scale)
     *
     * @default null
     */
    scale: number;
    /**
     * Indicates whether the widget will automatically [rotate to user's direction](https://www.w3.org/TR/geolocation-API/#coordinates_interface).Set to `false` to disable this behavior.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#useHeadingEnabled)
     *
     * @default true
     */
    useHeadingEnabled: boolean;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[LocateViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate-LocateViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#viewModel)
     */
    viewModel: LocateViewModel;

    /**
     * This function provides the ability to interrupt and cancel the process ofprogrammatically obtaining the location of the user's device.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#cancelLocate)
     *
     *
     */
    cancelLocate(): void;
    /**
     * Animates the view to the user's location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#locate)
     *
     *
     */
    locate(): IPromise<any>;
    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#render)
     *
     *
     */
    render(): any;
  }

  interface LocateConstructor {
    new (properties?: LocateProperties): Locate;
  }

  export const Locate: LocateConstructor;

  interface LocateProperties extends WidgetProperties, GoToProperties {
    /**
     * The HTML5 Geolocation Position options for locating. Refer to[Geolocation API Specification](http://www.w3.org/TR/geolocation-API/#position-options)for details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#geolocationOptions)
     *
     * @default { maximumAge: 0, timeout: 15000, enableHighAccuracy: true }
     */
    geolocationOptions?: any;
    /**
     * Indicates whether the widget should navigate the view to the position and scale of the geolocated result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#goToLocationEnabled)
     *
     * @default true
     */
    goToLocationEnabled?: boolean;
    /**
     * The graphic used to show the user's location on the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#graphic)
     */
    graphic?: GraphicProperties;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#iconClass)
     */
    iconClass?: string;
    /**
     * Indicates the scale to set on the view when navigating to the position of the geolocatedresult once a location is returned from the [track](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#event-track) event.If a scale value is not explicitly set, then the view will navigate to a default scale of `2500`.For 2D views the value should be within the [effectiveMinScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)and [effectiveMaxScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#scale)
     *
     * @default null
     */
    scale?: number;
    /**
     * Indicates whether the widget will automatically [rotate to user's direction](https://www.w3.org/TR/geolocation-API/#coordinates_interface).Set to `false` to disable this behavior.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#useHeadingEnabled)
     *
     * @default true
     */
    useHeadingEnabled?: boolean;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[LocateViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate-LocateViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#viewModel)
     */
    viewModel?: LocateViewModelProperties;
  }

  interface LocateViewModel extends Accessor, Evented, GeolocationPositioning, GoTo {
    /**
     * The current state of the widget.**Possible Values:** disabled | ready | locating
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate-LocateViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;

    /**
     * This function provides the ability to interrupt and cancel the process ofprogrammatically obtaining the location of the user's device.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate-LocateViewModel.html#cancelLocate)
     *
     *
     */
    cancelLocate(): void;
    /**
     * Animates the view to the user's location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate-LocateViewModel.html#locate)
     *
     *
     */
    locate(): IPromise<any>;
  }

  interface LocateViewModelConstructor {
    new (properties?: LocateViewModelProperties): LocateViewModel;
  }

  export const LocateViewModel: LocateViewModelConstructor;

  interface LocateViewModelProperties extends GeolocationPositioningProperties, GoToProperties {}

  interface NavigationToggle extends Widget {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle.html#iconClass)
     */
    iconClass: string;
    /**
     * Sets the layout of the widget to either `horizontal` or `vertical`. See thetable below for a list of possible values.Possible Value | Example---------------|--------vertical | ![navigation-toggle](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/navigation-toggle.png)horizontal | ![navigation-toggle-horizontal](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/navigation-toggle-horizontal.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle.html#layout)
     *
     * @default vertical
     */
    layout: string;
    /**
     * A reference to the SceneView. Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle.html#view)
     */
    view: SceneView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[NavigationToggleViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle-NavigationToggleViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle.html#viewModel)
     */
    viewModel: NavigationToggleViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle.html#render)
     *
     *
     */
    render(): any;
    /**
     * Toggles the navigation mode of the [view](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle.html#view) from `pan` to `rotate` orvice versa.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle.html#toggle)
     *
     *
     */
    toggle(): void;
  }

  interface NavigationToggleConstructor {
    new (properties?: NavigationToggleProperties): NavigationToggle;
  }

  export const NavigationToggle: NavigationToggleConstructor;

  interface NavigationToggleProperties extends WidgetProperties {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle.html#iconClass)
     */
    iconClass?: string;
    /**
     * Sets the layout of the widget to either `horizontal` or `vertical`. See thetable below for a list of possible values.Possible Value | Example---------------|--------vertical | ![navigation-toggle](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/navigation-toggle.png)horizontal | ![navigation-toggle-horizontal](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/navigation-toggle-horizontal.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle.html#layout)
     *
     * @default vertical
     */
    layout?: string;
    /**
     * A reference to the SceneView. Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle.html#view)
     */
    view?: SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[NavigationToggleViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle-NavigationToggleViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle.html#viewModel)
     */
    viewModel?: NavigationToggleViewModelProperties;
  }

  interface NavigationToggleViewModel extends Accessor {
    /**
     * The navigation mode of the [view](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle-NavigationToggleViewModel.html#view). See the table below for a list ofpossible values.Possible Value | Description---------------|-------------pan | The mouse drag gesture pans the view. Right-click + drag allows the user to perform a 3D rotate around the center of the view.rotate | The mouse drag gesture performs a 3D rotate around the center of the view and the right-click + drag gesture pans the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle-NavigationToggleViewModel.html#navigationMode)
     *
     * @default pan
     */
    navigationMode: string;
    /**
     * The state of the widget.**Possible Values:** disabled | ready
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle-NavigationToggleViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * The view associated with the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle-NavigationToggleViewModel.html#view)
     */
    view: SceneView;

    /**
     * Toggles the navigation mode of the [view](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle-NavigationToggleViewModel.html#view) from `pan` to `rotate` orvice versa.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle-NavigationToggleViewModel.html#toggle)
     *
     *
     */
    toggle(): void;
  }

  interface NavigationToggleViewModelConstructor {
    new (properties?: NavigationToggleViewModelProperties): NavigationToggleViewModel;
  }

  export const NavigationToggleViewModel: NavigationToggleViewModelConstructor;

  interface NavigationToggleViewModelProperties {
    /**
     * The navigation mode of the [view](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle-NavigationToggleViewModel.html#view). See the table below for a list ofpossible values.Possible Value | Description---------------|-------------pan | The mouse drag gesture pans the view. Right-click + drag allows the user to perform a 3D rotate around the center of the view.rotate | The mouse drag gesture performs a 3D rotate around the center of the view and the right-click + drag gesture pans the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle-NavigationToggleViewModel.html#navigationMode)
     *
     * @default pan
     */
    navigationMode?: string;
    /**
     * The view associated with the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle-NavigationToggleViewModel.html#view)
     */
    view?: SceneViewProperties;
  }

  interface Popup extends Widget, GoTo, Evented {
    /**
     * Defines actions that may be executed by clicking the iconor image symbolizing them in the popup. By default, every popup has a `zoom-to`action styled with a magnifying glass icon![popupTemplate-zoom-action](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/popuptemplate-zoom-action.png).When this icon is clicked, the view zooms in four LODs and centers on the selected feature.You may override this action by removing it from the `actions` array or by setting the[overwriteActions](esri-PopupTemplate.html#overwriteActions) property to `true` in a[PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html). The order of each action in the popup is the order in whichthey appear in the array.The [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#event-trigger-action) event fires each time an action in the popup is clicked.This event should be used to execute custom code for each action clicked. For example, if you wouldlike to add a `zoom-out` action to the popup that zooms the view out several LODs, you woulddefine the zoom-out code in a separate function. Then you would call the custom `zoom-out` functionin the [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#event-trigger-action) event handler. See the sample codesnippet below for more details on how this works.Actions are defined with the properties listed in the [ActionButton](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html) or [ActionToggle](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html) classes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#actions)
     */
    actions: Collection<ActionButton | ActionToggle>;
    /**
     * Position of the popup in relation to the selected feature.**Possible Values:** auto | top-center | top-right | bottom-left | bottom-center | bottom-right | Function
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#alignment)
     *
     * @default "auto"
     */
    alignment: string | Function;
    /**
     * This closes the popup when the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) camera or [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) changes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#autoCloseEnabled)
     *
     * @default false
     */
    autoCloseEnabled: boolean;
    /**
     * This property indicates to the `Popup` that it needs to allow or disallow the clickevent propagation.Use `view.popup.autoOpenEnabled = false;` when needing to stop the click event propagation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#autoOpenEnabled)
     *
     * @default true
     */
    autoOpenEnabled: boolean;
    /**
     * Indicates whether the popup displays its content. If `true`, only the header displays.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#collapsed)
     *
     * @default false
     */
    collapsed: boolean;
    /**
     * Indicates whether to enable collapse functionality for the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#collapseEnabled)
     *
     * @default true
     */
    collapseEnabled: boolean;
    /**
     * The content of the popup. When set directly on the Popup, this content isstatic and cannot use fields to set content templates. To set a templatefor the content based on field or attribute names, see[PopupTemplate.content](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#content).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#content)
     */
    content: string | HTMLElement | Widget;
    /**
     * Dock position in the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html).**Possible Values:** top-left | top-center | top-right | bottom-left | bottom-center | bottom-right
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#currentDockPosition)
     */
    readonly currentDockPosition: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled)
     *
     * @default false
     */
    defaultPopupTemplateEnabled: boolean;
    /**
     * Indicates whether the placement of the popup is docked to the side of the view.Docking the popup allows for a better user experience, particularly when openingpopups in apps on mobile devices. When a popup is "dockEnabled" it means the popup nolonger points to the [selected feature](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#selectedFeature) or the [location](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#location)assigned to it. Rather it is attached to a side, the top, or the bottom of the view.See [dockOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#dockOptions) to override default options related to docking the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#dockEnabled)
     *
     * @default false
     */
    dockEnabled: boolean;
    /**
     * Docking the popup allows for a better user experience, particularly when openingpopups in apps on mobile devices. When a popup is "dockEnabled" it means the popup nolonger points to the [selected feature](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#selectedFeature) or the [location](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#location)assigned to it. Rather it is placed in one of the corners of the view or to the top or bottomof it. This property allows the developer to set various options for docking the popup.See the object specification table below to override default docking properties on the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#dockOptions)
     */
    dockOptions: PopupDockOptions;
    /**
     * The number of selected [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#features) available to the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#featureCount)
     *
     * @default 0
     */
    readonly featureCount: number;
    /**
     * Shows pagination for the popup if available. This allows the user toscroll through various [selected features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#features) using eitherarrows![popup-pagination-arrows](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/popup-pagination-arrows.png)or a menu.![popup-feature-menu](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/popup-pagination-menu.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#featureNavigationEnabled)
     */
    featureNavigationEnabled: boolean;
    /**
     * An array of features associated with the popup. Each graphic in this array musthave a valid [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) set. They may share the same[PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) or have unique[PopupTemplates](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) depending on their attributes.The [content](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#content) and [title](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#title)of the popup is set based on the `content` and `title` properties of each graphic's respective[PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).When more than one graphic exists in this array, the current content of thePopup is set based on the value of the [selected feature](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#selectedFeature).This value is `null` if no features are associated with the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#features)
     */
    features: Graphic[];
    /**
     * Highlight the selected popup feature using the [highlightOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)set on the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or the [highlightOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)set on the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#highlightEnabled)
     *
     * @default true
     */
    highlightEnabled: boolean;
    /**
     * Point used to position the popup. This is automatically set when viewing thepopup by selecting a feature. If using the Popup to display content not relatedto features in the map, such as the results from a task, then you must set thisproperty before making the popup [visible](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#visible) to the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#location)
     */
    location: Point;
    /**
     * An array of pending Promises that have not yet been fulfilled. If there areno pending promises, the value is `null`. When the pending promises areresolved they are removed from this array and the features they returnare pushed into the [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#features) array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#promises)
     */
    promises: IPromise<any>[];
    /**
     * The selected feature accessed by the popup. The content of the Popup isdetermined based on the [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) assigned tothis feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#selectedFeature)
     */
    readonly selectedFeature: Graphic;
    /**
     * Index of the feature that is [selected](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#selectedFeature). When [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#features) are set,the first index is automatically selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#selectedFeatureIndex)
     */
    selectedFeatureIndex: number;
    /**
     * Indicates whether to display a spinner at the popup location prior to itsdisplay when it has pending promises.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#spinnerEnabled)
     */
    spinnerEnabled: boolean;
    /**
     * The title of the popup. This can be set generically on the popup nomatter the features that are selected. If the [selected feature](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#selectedFeature)has a [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html), then the title set in thecorresponding template is used here.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#title)
     */
    title: string;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#view)
     */
    view: MapView | SceneView;
    /**
     * This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[PopupViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#viewModel)
     */
    viewModel: PopupViewModel;
    /**
     * Indicates whether the popup is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#visible)
     */
    visible: boolean;

    /**
     * Use this method to remove focus from the Widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#blur)
     *
     *
     */
    blur(): void;
    /**
     * Removes [promises](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#promises), [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#features), [content](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#content),[title](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#title) and [location](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#location) from the Popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#clear)
     *
     *
     */
    clear(): void;
    /**
     * Closes the popup by setting its [visible](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#visible) property to `false`. Users canalternatively close the popupby directly setting the [visible](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#visible) property to `false`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#close)
     *
     *
     */
    close(): void;
    /**
     * Use this method to give focus to the Widget if the widget is able to be focused.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#focus)
     *
     *
     */
    focus(): void;
    /**
     * Selects the feature at the next index in relation to the selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#next)
     *
     *
     */
    next(): PopupViewModel;
    /**
     * Opens the popup at the given location with content defined either explicitly with `content`or driven from the [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) of input features. This method setsthe popup's [visible](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#visible) property to `true`. Users can alternatively open the popupby directly setting the [visible](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#visible) property to `true`. The popup will only display ifthe view's size constraints in [dockOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#dockOptions) are met or the [location](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#location)property is set to a geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#open)
     *
     * @param options Defines the location and content of the popup when opened.
     * @param options.title Sets the [title](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#title) of the popup.
     * @param options.content Sets the the [content](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#content) of the popup.
     * @param options.location Sets the popup's [location](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#location), which is the geometry used to position the popup.
     * @param options.fetchFeatures When `true`, indicates the popup should fetch the content of this feature and display it. If no [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) exists, a default template is created for the layer if[defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled) = `true`. In order for this option to work, there must be a valid `view` and `location` set.
     * @param options.features Sets the popup's [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#features), which populate the title and content of the popup based on each graphic's [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
     * @param options.promises Sets pending [promises](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#promises) on the popup. The popup will display once the promises resolve. Each promise must resolve to an array of [Graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html).
     * @param options.featureMenuOpen **Since:** 4.5    This property enables multiple features in a popup to display in a list rather than displaying the first selected feature. Setting this to `true`allows the user to scroll through the list of features returned from the query and choose the selection they want to display within the popup.
     * @param options.updateLocationEnabled When `true` indicates the popup should update its [location](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#location) for each paginated feature based on the [selected feature's](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#selectedFeature) geometry.
     * @param options.collapsed **Since:** 4.5    When `true`, indicates that only the popup header will display.
     *
     */
    open(options?: PopupOpenOptions): void;
    /**
     * Selects the feature at the previous index in relation to the selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#previous)
     *
     *
     */
    previous(): PopupViewModel;
    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#render)
     *
     *
     */
    render(): any;
    /**
     * Positions the popup on the view.Moves the popup into the view's extent if the popup is partially or fully outsidethe view's extent.If the popup is partially out of view, the view will move to fully show the popup.If the popup is fully out of view, the view will move to the popup's location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#reposition)
     *
     *
     */
    reposition(): void;
    /**
     * Triggers the [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#event-trigger-action) event and executes the [action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#actions)at the specified index in the [actions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#actions) array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#triggerAction)
     *
     * @param actionIndex The index of the [action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#actions) to execute.
     *
     */
    triggerAction(actionIndex: number): void;
  }

  interface PopupConstructor {
    new (properties?: PopupProperties): Popup;
  }

  export const Popup: PopupConstructor;

  interface PopupProperties extends WidgetProperties, GoToProperties {
    /**
     * Defines actions that may be executed by clicking the iconor image symbolizing them in the popup. By default, every popup has a `zoom-to`action styled with a magnifying glass icon![popupTemplate-zoom-action](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/popuptemplate-zoom-action.png).When this icon is clicked, the view zooms in four LODs and centers on the selected feature.You may override this action by removing it from the `actions` array or by setting the[overwriteActions](esri-PopupTemplate.html#overwriteActions) property to `true` in a[PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html). The order of each action in the popup is the order in whichthey appear in the array.The [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#event-trigger-action) event fires each time an action in the popup is clicked.This event should be used to execute custom code for each action clicked. For example, if you wouldlike to add a `zoom-out` action to the popup that zooms the view out several LODs, you woulddefine the zoom-out code in a separate function. Then you would call the custom `zoom-out` functionin the [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#event-trigger-action) event handler. See the sample codesnippet below for more details on how this works.Actions are defined with the properties listed in the [ActionButton](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html) or [ActionToggle](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html) classes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#actions)
     */
    actions?: CollectionProperties<ActionButton | ActionToggle>;
    /**
     * Position of the popup in relation to the selected feature.**Possible Values:** auto | top-center | top-right | bottom-left | bottom-center | bottom-right | Function
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#alignment)
     *
     * @default "auto"
     */
    alignment?: string | Function;
    /**
     * This closes the popup when the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) camera or [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) changes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#autoCloseEnabled)
     *
     * @default false
     */
    autoCloseEnabled?: boolean;
    /**
     * This property indicates to the `Popup` that it needs to allow or disallow the clickevent propagation.Use `view.popup.autoOpenEnabled = false;` when needing to stop the click event propagation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#autoOpenEnabled)
     *
     * @default true
     */
    autoOpenEnabled?: boolean;
    /**
     * Indicates whether the popup displays its content. If `true`, only the header displays.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#collapsed)
     *
     * @default false
     */
    collapsed?: boolean;
    /**
     * Indicates whether to enable collapse functionality for the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#collapseEnabled)
     *
     * @default true
     */
    collapseEnabled?: boolean;
    /**
     * The content of the popup. When set directly on the Popup, this content isstatic and cannot use fields to set content templates. To set a templatefor the content based on field or attribute names, see[PopupTemplate.content](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#content).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#content)
     */
    content?: string | HTMLElement | WidgetProperties;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled)
     *
     * @default false
     */
    defaultPopupTemplateEnabled?: boolean;
    /**
     * Indicates whether the placement of the popup is docked to the side of the view.Docking the popup allows for a better user experience, particularly when openingpopups in apps on mobile devices. When a popup is "dockEnabled" it means the popup nolonger points to the [selected feature](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#selectedFeature) or the [location](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#location)assigned to it. Rather it is attached to a side, the top, or the bottom of the view.See [dockOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#dockOptions) to override default options related to docking the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#dockEnabled)
     *
     * @default false
     */
    dockEnabled?: boolean;
    /**
     * Docking the popup allows for a better user experience, particularly when openingpopups in apps on mobile devices. When a popup is "dockEnabled" it means the popup nolonger points to the [selected feature](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#selectedFeature) or the [location](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#location)assigned to it. Rather it is placed in one of the corners of the view or to the top or bottomof it. This property allows the developer to set various options for docking the popup.See the object specification table below to override default docking properties on the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#dockOptions)
     */
    dockOptions?: PopupDockOptions;
    /**
     * Shows pagination for the popup if available. This allows the user toscroll through various [selected features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#features) using eitherarrows![popup-pagination-arrows](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/popup-pagination-arrows.png)or a menu.![popup-feature-menu](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/popup-pagination-menu.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#featureNavigationEnabled)
     */
    featureNavigationEnabled?: boolean;
    /**
     * An array of features associated with the popup. Each graphic in this array musthave a valid [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) set. They may share the same[PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) or have unique[PopupTemplates](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) depending on their attributes.The [content](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#content) and [title](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#title)of the popup is set based on the `content` and `title` properties of each graphic's respective[PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).When more than one graphic exists in this array, the current content of thePopup is set based on the value of the [selected feature](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#selectedFeature).This value is `null` if no features are associated with the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#features)
     */
    features?: GraphicProperties[];
    /**
     * Highlight the selected popup feature using the [highlightOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)set on the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or the [highlightOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)set on the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#highlightEnabled)
     *
     * @default true
     */
    highlightEnabled?: boolean;
    /**
     * Point used to position the popup. This is automatically set when viewing thepopup by selecting a feature. If using the Popup to display content not relatedto features in the map, such as the results from a task, then you must set thisproperty before making the popup [visible](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#visible) to the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#location)
     */
    location?: PointProperties;
    /**
     * An array of pending Promises that have not yet been fulfilled. If there areno pending promises, the value is `null`. When the pending promises areresolved they are removed from this array and the features they returnare pushed into the [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#features) array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#promises)
     */
    promises?: IPromise<any>[];
    /**
     * Index of the feature that is [selected](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#selectedFeature). When [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#features) are set,the first index is automatically selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#selectedFeatureIndex)
     */
    selectedFeatureIndex?: number;
    /**
     * Indicates whether to display a spinner at the popup location prior to itsdisplay when it has pending promises.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#spinnerEnabled)
     */
    spinnerEnabled?: boolean;
    /**
     * The title of the popup. This can be set generically on the popup nomatter the features that are selected. If the [selected feature](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#selectedFeature)has a [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html), then the title set in thecorresponding template is used here.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#title)
     */
    title?: string;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[PopupViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#viewModel)
     */
    viewModel?: PopupViewModelProperties;
    /**
     * Indicates whether the popup is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#visible)
     */
    visible?: boolean;
  }

  interface PopupViewModel extends Accessor, Evented, GoTo {
    /**
     * [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of [action](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html) or [action toggle](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html) objects.Each action may be executed by clicking the iconor image symbolizing them in the popup. By default, every popup has a `zoom-to`action styled with a magnifying glass icon![popupTemplate-zoom-action](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/popuptemplate-zoom-action.png).When this icon is clicked, the view zooms in four LODs and centers on the selected feature.You may override this action by removing it from the actions [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html)or by setting the[overwriteActions](esri-PopupTemplate.html#overwriteActions) property to `true` in a[PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html). The order of each action in the popup is the order in whichthey appear in the actions [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html).The [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#event-trigger-action) event fires each time an action in the popup is clicked.This event should be used to execute custom code for each action clicked. For example, if you wouldlike to add a `zoom-out` action to the popup that zooms the view out several LODs, you woulddefine the zoom-out code in a separate function. Then you would call the custom `zoom-out` functionin the [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#event-trigger-action) event handler. See the sample codesnippet below for more details on how this works.Actions are defined with the properties listed in the [ActionButton](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html) or [ActionToggle](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html) class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#actions)
     */
    actions: Collection<ActionButton | ActionToggle>;
    /**
     * A collection of [actions](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html) or [action toggles](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html) used within the [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#allActions)
     */
    readonly allActions: Collection<ActionButton | ActionToggle>;
    /**
     * This closes the popup when the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) camera or [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) changes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#autoCloseEnabled)
     *
     * @default false
     */
    autoCloseEnabled: boolean;
    /**
     * This property indicates to the `Popup` that it needs to allow or disallow the clickevent propagation.Use `view.popup.autoOpenEnabled = false;` when needing to stop the click event propagation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#autoOpenEnabled)
     *
     * @default true
     */
    autoOpenEnabled: boolean;
    /**
     * The content of the popup. When set directly on the Popup, this content mayonly be static and cannot use fields to set content templates. To set a templatefor the content based on field or attribute names, see[PopupTemplate.content](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#content).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#content)
     */
    content: string | HTMLElement | Widget;
    /**
     * Enables automatic creation of a popup template for layers that have popups enabled but nopopupTemplate defined. Automatic popup templates are supported for layers thatsupport the `createPopupTemplate` method. (Supported for [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html),[SceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html), [CSVLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html),[StreamLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html) and [ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html)).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#defaultPopupTemplateEnabled)
     *
     * @default false
     */
    defaultPopupTemplateEnabled: boolean;
    /**
     * The number of selected [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#features) available to the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#featureCount)
     *
     * @default 0
     */
    readonly featureCount: number;
    /**
     * An array of features associated with the popup. Each graphic in this array musthave a valid [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) set. They may share the same[PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) or have unique[PopupTemplates](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) depending on their attributes.The [content](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#content) and [title](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#title)of the poup is set based on the `content` and `title` properties of each graphic's respective[PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).When more than one graphic exists in this array, the current content of thePopup is set based on the value of the [selected feature](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#selectedFeature).This value is `null` if no features are associated with the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#features)
     */
    features: Graphic[];
    /**
     * Highlight the selected popup feature using the [highlightOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)set on the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or the [highlightOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)set on the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#highlightEnabled)
     *
     * @default true
     */
    highlightEnabled: boolean;
    /**
     * Geometry used to position the popup. This is automatically set when viewing thepopup by selecting a feature. If using the Popup to display content not relatedto features in the map, such as the results from a task, then you must set thisproperty before making the popup [visible](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#visible) to the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#location)
     */
    location: Point;
    /**
     * The number of [promises](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#promises) remaining to be resolved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#pendingPromisesCount)
     *
     * @default 0
     */
    readonly pendingPromisesCount: number;
    /**
     * The number of selected [promises](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#promises) available to the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#promiseCount)
     *
     * @default 0
     */
    readonly promiseCount: number;
    /**
     * An array of pending Promises that have not yet been fulfilled. If there areno pending Promises, the value is `null`. When the pending Promises areresolved they are removed from this array and the features they returnare pushed into the [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#features) array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#promises)
     */
    promises: IPromise<any>[];
    /**
     * The selected feature accessed by the popup. The content of the Popup isdetermined based on the [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) assigned tothis feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#selectedFeature)
     */
    readonly selectedFeature: Graphic;
    /**
     * Index of the feature that is [selected](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#selectedFeature). When [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#features) are set,the first index is automatically selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#selectedFeatureIndex)
     */
    selectedFeatureIndex: number;
    /**
     * The view model's state.**Possible Values:** ready | disabled
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * The title of the popup. This can be set generically on the popup nomatter the features that are selected. If the [selected feature](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#selectedFeature)has a [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html), then the title set in thecorresponding template is used here.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#title)
     */
    title: string;
    /**
     * The view associated with the Popup instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#view)
     */
    view: MapView | SceneView;
    /**
     * Indicates whether the popup is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#visible)
     */
    visible: boolean;

    /**
     * Removes [promises](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#promises), [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#features), [content](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#content),[title](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#title) and [location](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#location) from the Popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#clear)
     *
     *
     */
    clear(): void;
    /**
     * Selects the feature at the next index in relation to the selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#next)
     *
     *
     */
    next(): PopupViewModel;
    /**
     * Opens the popup at the given location with content defined either explicitly with `content`or driven from the [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) of input features. This method setsthe popup's [visible](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#visible) property to `true`. Users can alternatively open the popupby directly setting the [visible](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#visible) property to `true`. The popup will only display ifthe view's size constraints in [dockOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#dockOptions) are met or the [location](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#location)property is set to a geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#open)
     *
     * @param options Defines the location and content of the popup when opened.
     * @param options.title Sets the [title](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#title) of the popup.
     * @param options.content Sets the the [content](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#content) of the popup.
     * @param options.fetchFeatures **Since:** 4.12    When `true`, indicates the popup should fetch the content of this feature and display it. If no [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) exists, a default template is created for the layer if[defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#defaultPopupTemplateEnabled) = `true`. In order for this option to work, there must be a valid `view` and `location` set.
     * @param options.location Sets the popup's [location](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#location), which is the geometry used to position the popup.
     * @param options.features Sets the popup's [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#features), which populate the title and content of the popup based on each graphic's [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
     * @param options.promises Sets pending [promises](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#promises) on the popup. The popup will display once the promises resolve. Each promise must resolve to an array of [Graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html).allows the user to scroll through the list of features returned from the query and choose the selection they want to display within the popup.
     * @param options.updateLocationEnabled When `true`, indicates the popup should update its [location](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#location) for each paginated feature based on the [selected feature's](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#selectedFeature) geometry.
     * @param options.collapsed **Since:** 4.5    When `true`, indicates that only the popup header will display.
     *
     */
    open(options?: PopupViewModelOpenOptions): void;
    /**
     * Selects the feature at the previous index in relation to the selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#previous)
     *
     *
     */
    previous(): PopupViewModel;
    /**
     * Triggers the [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#event-trigger-action) event and executes the [action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#actions)at the specified index in the [actions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#actions) array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#triggerAction)
     *
     * @param actionIndex The index of the [action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#actions) to execute.
     *
     */
    triggerAction(actionIndex: number): void;

    on(name: "trigger-action", eventHandler: PopupViewModelTriggerActionEventHandler): IHandle;
  }

  interface PopupViewModelConstructor {
    new (properties?: PopupViewModelProperties): PopupViewModel;
  }

  export const PopupViewModel: PopupViewModelConstructor;

  interface PopupViewModelProperties extends GoToProperties {
    /**
     * [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of [action](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html) or [action toggle](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html) objects.Each action may be executed by clicking the iconor image symbolizing them in the popup. By default, every popup has a `zoom-to`action styled with a magnifying glass icon![popupTemplate-zoom-action](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/popuptemplate-zoom-action.png).When this icon is clicked, the view zooms in four LODs and centers on the selected feature.You may override this action by removing it from the actions [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html)or by setting the[overwriteActions](esri-PopupTemplate.html#overwriteActions) property to `true` in a[PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html). The order of each action in the popup is the order in whichthey appear in the actions [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html).The [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#event-trigger-action) event fires each time an action in the popup is clicked.This event should be used to execute custom code for each action clicked. For example, if you wouldlike to add a `zoom-out` action to the popup that zooms the view out several LODs, you woulddefine the zoom-out code in a separate function. Then you would call the custom `zoom-out` functionin the [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#event-trigger-action) event handler. See the sample codesnippet below for more details on how this works.Actions are defined with the properties listed in the [ActionButton](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html) or [ActionToggle](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html) class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#actions)
     */
    actions?: CollectionProperties<ActionButton | ActionToggle>;
    /**
     * This closes the popup when the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) camera or [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) changes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#autoCloseEnabled)
     *
     * @default false
     */
    autoCloseEnabled?: boolean;
    /**
     * This property indicates to the `Popup` that it needs to allow or disallow the clickevent propagation.Use `view.popup.autoOpenEnabled = false;` when needing to stop the click event propagation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#autoOpenEnabled)
     *
     * @default true
     */
    autoOpenEnabled?: boolean;
    /**
     * The content of the popup. When set directly on the Popup, this content mayonly be static and cannot use fields to set content templates. To set a templatefor the content based on field or attribute names, see[PopupTemplate.content](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#content).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#content)
     */
    content?: string | HTMLElement | WidgetProperties;
    /**
     * Enables automatic creation of a popup template for layers that have popups enabled but nopopupTemplate defined. Automatic popup templates are supported for layers thatsupport the `createPopupTemplate` method. (Supported for [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html),[SceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html), [CSVLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html),[StreamLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html) and [ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html)).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#defaultPopupTemplateEnabled)
     *
     * @default false
     */
    defaultPopupTemplateEnabled?: boolean;
    /**
     * An array of features associated with the popup. Each graphic in this array musthave a valid [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) set. They may share the same[PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) or have unique[PopupTemplates](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) depending on their attributes.The [content](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#content) and [title](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#title)of the poup is set based on the `content` and `title` properties of each graphic's respective[PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).When more than one graphic exists in this array, the current content of thePopup is set based on the value of the [selected feature](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#selectedFeature).This value is `null` if no features are associated with the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#features)
     */
    features?: GraphicProperties[];
    /**
     * Highlight the selected popup feature using the [highlightOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)set on the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or the [highlightOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)set on the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#highlightEnabled)
     *
     * @default true
     */
    highlightEnabled?: boolean;
    /**
     * Geometry used to position the popup. This is automatically set when viewing thepopup by selecting a feature. If using the Popup to display content not relatedto features in the map, such as the results from a task, then you must set thisproperty before making the popup [visible](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#visible) to the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#location)
     */
    location?: PointProperties;
    /**
     * An array of pending Promises that have not yet been fulfilled. If there areno pending Promises, the value is `null`. When the pending Promises areresolved they are removed from this array and the features they returnare pushed into the [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#features) array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#promises)
     */
    promises?: IPromise<any>[];
    /**
     * Index of the feature that is [selected](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#selectedFeature). When [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#features) are set,the first index is automatically selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#selectedFeatureIndex)
     */
    selectedFeatureIndex?: number;
    /**
     * The title of the popup. This can be set generically on the popup nomatter the features that are selected. If the [selected feature](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#selectedFeature)has a [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html), then the title set in thecorresponding template is used here.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#title)
     */
    title?: string;
    /**
     * The view associated with the Popup instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * Indicates whether the popup is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#visible)
     */
    visible?: boolean;
  }

  export interface PopupViewModelOpenOptions extends Object {
    /**
     * Sets the [title](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#title) of the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#open)
     */
    title?: string;
    /**
     * Sets the the [content](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#content) of the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#open)
     */
    content?: string;
    /**
     * **Since:** 4.12    When `true`, indicates the popup should fetch the content of this feature and display it. If no [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) exists, a default template is created for the layer if[defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#defaultPopupTemplateEnabled) = `true`. In order for this option to work, there must be a valid `view` and `location` set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#open)
     *
     * @default false
     */
    fetchFeatures?: boolean;
    /**
     * Sets the popup's [location](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#location), which is the geometry used to position the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#open)
     */
    location?: Geometry;
    /**
     * Sets the popup's [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#features), which populate the title and content of the popup based on each graphic's [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#open)
     */
    features?: Graphic[];
    /**
     * Sets pending [promises](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#promises) on the popup. The popup will display once the promises resolve. Each promise must resolve to an array of [Graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html).allows the user to scroll through the list of features returned from the query and choose the selection they want to display within the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#open)
     */
    promises?: IPromise<any>[];
    /**
     * When `true`, indicates the popup should update its [location](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#location) for each paginated feature based on the [selected feature's](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#selectedFeature) geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#open)
     *
     * @default false
     */
    updateLocationEnabled?: boolean;
    /**
     * **Since:** 4.5    When `true`, indicates that only the popup header will display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#open)
     *
     * @default false
     */
    collapsed?: boolean;
  }

  export interface PopupViewModelTriggerActionEvent {
    action: ActionButton | ActionToggle;
  }

  export interface PopupDockOptions extends Object {
    /**
     * Defines the dimensions of the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html)                       at which to dock the popup. Set to `false` to disable docking at a breakpoint.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#dockOptions)
     *
     * @default true
     */
    breakpoint?: boolean | PopupDockOptionsBreakpoint;
    /**
     * If `true`, displays the dock button. If `false`, hides the dock                        button from the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#dockOptions)
     */
    buttonEnabled?: boolean;
    /**
     * The position in the view at which to dock the popup.                       Can be set as either a string or function. See the table below for known                       string values and their position in the view based on the view's size.                           Known Value | View size > breakpoint | View size < breakpoint--------------- | ------------------------------- | -------------auto | top-right | bottom 100%top-left | top-left | top 100%top-center | top-center | top 100%top-right | top-right | top 100%bottom-left | bottom-left | bottom 100%bottom-center | bottom-center | bottom 100%bottom-right | bottom-right | bottom 100%
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#dockOptions)
     *
     * @default auto
     */
    position?: string | Function;
  }

  export interface PopupDockOptionsBreakpoint extends Object {
    /**
     * The maximum width of the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html)                       at which the popup will be set to dockEnabled automatically.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#dockOptions)
     *
     * @default 544
     */
    width?: number;
    /**
     * The maximum height of the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html)                       at which the popup will be set to dockEnabled automatically.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#dockOptions)
     *
     * @default 544
     */
    height?: number;
  }

  export interface PopupOpenOptions extends Object {
    /**
     * Sets the [title](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#title) of the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#open)
     */
    title?: string;
    /**
     * Sets the the [content](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#content) of the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#open)
     */
    content?: string | HTMLElement | Widget;
    /**
     * Sets the popup's [location](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#location), which is the geometry used to position the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#open)
     */
    location?: Geometry;
    /**
     * When `true`, indicates the popup should fetch the content of this feature and display it. If no [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) exists, a default template is created for the layer if[defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled) = `true`. In order for this option to work, there must be a valid `view` and `location` set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#open)
     *
     * @default false
     */
    fetchFeatures?: boolean;
    /**
     * Sets the popup's [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#features), which populate the title and content of the popup based on each graphic's [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#open)
     */
    features?: Graphic[];
    /**
     * Sets pending [promises](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#promises) on the popup. The popup will display once the promises resolve. Each promise must resolve to an array of [Graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#open)
     */
    promises?: IPromise<any>[];
    /**
     * **Since:** 4.5    This property enables multiple features in a popup to display in a list rather than displaying the first selected feature. Setting this to `true`allows the user to scroll through the list of features returned from the query and choose the selection they want to display within the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#open)
     *
     * @default false
     */
    featureMenuOpen?: boolean;
    /**
     * When `true` indicates the popup should update its [location](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#location) for each paginated feature based on the [selected feature's](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#selectedFeature) geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#open)
     *
     * @default false
     */
    updateLocationEnabled?: boolean;
    /**
     * **Since:** 4.5    When `true`, indicates that only the popup header will display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#open)
     *
     * @default false
     */
    collapsed?: boolean;
  }

  interface Print extends Widget {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#iconClass)
     */
    iconClass: string;
    /**
     * The URL of the REST endpoint of the Export Web Map Task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#printServiceUrl)
     */
    printServiceUrl: string;
    /**
     * Defines the layout template options used by the [Print](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html) widget to generate the print page.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#templateOptions)
     */
    templateOptions: TemplateOptions;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). Set this to linkthe widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#view)
     */
    view: MapView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[PrintViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#viewModel)
     */
    viewModel: PrintViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#render)
     *
     *
     */
    render(): any;
  }

  interface PrintConstructor {
    new (properties?: PrintProperties): Print;
  }

  export const Print: PrintConstructor;

  interface PrintProperties extends WidgetProperties {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#iconClass)
     */
    iconClass?: string;
    /**
     * The URL of the REST endpoint of the Export Web Map Task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#printServiceUrl)
     */
    printServiceUrl?: string;
    /**
     * Defines the layout template options used by the [Print](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html) widget to generate the print page.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#templateOptions)
     */
    templateOptions?: TemplateOptionsProperties;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). Set this to linkthe widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#view)
     */
    view?: MapViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[PrintViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#viewModel)
     */
    viewModel?: PrintViewModelProperties;
  }

  interface PrintViewModel extends Accessor {
    /**
     * The URL of the REST endpoint of the Export Web Map Task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#printServiceUrl)
     */
    printServiceUrl: string;
    /**
     * When `true`, scale is used in the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#scaleEnabled)
     *
     * @default false
     */
    scaleEnabled: boolean;
    /**
     * The view model's state.**Possible Values:** disabled | ready | complete
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * The service metadata that contains the layout/format information for the printout.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#templatesInfo)
     */
    readonly templatesInfo: any;
    /**
     * The time interval in milliseconds between each job status request sent to an asynchronous GP task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#updateDelay)
     *
     * @default 1000
     */
    updateDelay: number;
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#view)
     */
    view: MapView;

    /**
     * This method should be called to load the view model's printing resources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#load)
     *
     *
     */
    load(): IPromise<any>;
    /**
     * Prints (exports) the current MapView according to selected options.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#print)
     *
     * @param printTemplate The       [PrintTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html) is used to specify       the layout template options which is then used by the PrintTask to       generate the print page.
     *
     */
    print(printTemplate: PrintTemplate): IPromise<any>;
  }

  interface PrintViewModelConstructor {
    new (properties?: PrintViewModelProperties): PrintViewModel;
  }

  export const PrintViewModel: PrintViewModelConstructor;

  interface PrintViewModelProperties {
    /**
     * The URL of the REST endpoint of the Export Web Map Task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#printServiceUrl)
     */
    printServiceUrl?: string;
    /**
     * When `true`, scale is used in the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#scaleEnabled)
     *
     * @default false
     */
    scaleEnabled?: boolean;
    /**
     * The time interval in milliseconds between each job status request sent to an asynchronous GP task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#updateDelay)
     *
     * @default 1000
     */
    updateDelay?: number;
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#view)
     */
    view?: MapViewProperties;
  }

  interface TemplateOptions extends Accessor {
    /**
     * When `false`, the attribution is not displayed on the printout.This only applies when the [layout](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#layout) value is `map-only`.Reference our policies on [Licensing & Attribution](https://developers.arcgis.com/javascript/latest/guide/licensing/) for specific attribution requirements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#attributionEnabled)
     *
     * @default true
     */
    attributionEnabled: boolean;
    /**
     * The text used for the author if the specified layout contains an author text element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#author)
     */
    author: string;
    /**
     * The text used for the copyright if the specified layout contains an copyright text element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#copyright)
     */
    copyright: string;
    /**
     * Resolution in dots per inch.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#dpi)
     *
     * @default 96
     */
    dpi: string;
    /**
     * When true, the feature's attributes are included in feature collection layers even when they are not needed forrendering. By default they are removed to reduce the request size. Only applicable to custom print serviceswhich use the feature attributes, for example to display a table of features and their attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#forceFeatureAttributes)
     *
     * @default false
     */
    forceFeatureAttributes: boolean;
    /**
     * The output format for the printed map.**Possible Values:** pdf | png32 | png8 | jpg | gif | eps | svg | svgz
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#format)
     *
     * @default pdf
     */
    format: string;
    /**
     * Map height.This only applies when the [layout](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#layout) value is `map-only`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#height)
     */
    height: number;
    /**
     * The layout used for the print output. When the value is `map-only` or is empty, the output map does not contain any page layoutsurroundings (for example, title, legend, scale bar and so forth). The print service provides out-of-the-box templates listed in possible values.The server administrator can add additional templates to the print service.Possible values are listed below:Value | Description| --- | ---map-only | Map does not contain any layout elements. Only map image is printed.a3-landscape | A3 Landscapea3-portrait | A3 Portraita4-landscape | A4 Landscapea4-portrait | A4 Portraitletter-ansi-a-landscape | Letter ANSI A Landscapeletter-ansi-a-portrait | Letter ANSI A Portraittabloid-ansi-b-landscape| Tabloid ANSI B Landscapetabloid-ansi-b-portrait | Tabloid ANSI B Portrait
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#layout)
     *
     * @default letter-ansi-a-landscape
     */
    layout: string;
    /**
     * When `false`, the legend is not displayed on the printout.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled: boolean;
    /**
     * When `true`, scale is used in the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#scaleEnabled)
     *
     * @default false
     */
    scaleEnabled: boolean;
    /**
     * The text used for the map title if the specified layout contains a title text element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#title)
     */
    title: string;
    /**
     * Map width.This only applies when the [layout](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#layout) value is `map-only`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#width)
     */
    width: number;
  }

  interface TemplateOptionsConstructor {
    new (properties?: TemplateOptionsProperties): TemplateOptions;
  }

  export const TemplateOptions: TemplateOptionsConstructor;

  interface TemplateOptionsProperties {
    /**
     * When `false`, the attribution is not displayed on the printout.This only applies when the [layout](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#layout) value is `map-only`.Reference our policies on [Licensing & Attribution](https://developers.arcgis.com/javascript/latest/guide/licensing/) for specific attribution requirements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#attributionEnabled)
     *
     * @default true
     */
    attributionEnabled?: boolean;
    /**
     * The text used for the author if the specified layout contains an author text element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#author)
     */
    author?: string;
    /**
     * The text used for the copyright if the specified layout contains an copyright text element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#copyright)
     */
    copyright?: string;
    /**
     * Resolution in dots per inch.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#dpi)
     *
     * @default 96
     */
    dpi?: string;
    /**
     * When true, the feature's attributes are included in feature collection layers even when they are not needed forrendering. By default they are removed to reduce the request size. Only applicable to custom print serviceswhich use the feature attributes, for example to display a table of features and their attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#forceFeatureAttributes)
     *
     * @default false
     */
    forceFeatureAttributes?: boolean;
    /**
     * The output format for the printed map.**Possible Values:** pdf | png32 | png8 | jpg | gif | eps | svg | svgz
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#format)
     *
     * @default pdf
     */
    format?: string;
    /**
     * Map height.This only applies when the [layout](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#layout) value is `map-only`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#height)
     */
    height?: number;
    /**
     * The layout used for the print output. When the value is `map-only` or is empty, the output map does not contain any page layoutsurroundings (for example, title, legend, scale bar and so forth). The print service provides out-of-the-box templates listed in possible values.The server administrator can add additional templates to the print service.Possible values are listed below:Value | Description| --- | ---map-only | Map does not contain any layout elements. Only map image is printed.a3-landscape | A3 Landscapea3-portrait | A3 Portraita4-landscape | A4 Landscapea4-portrait | A4 Portraitletter-ansi-a-landscape | Letter ANSI A Landscapeletter-ansi-a-portrait | Letter ANSI A Portraittabloid-ansi-b-landscape| Tabloid ANSI B Landscapetabloid-ansi-b-portrait | Tabloid ANSI B Portrait
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#layout)
     *
     * @default letter-ansi-a-landscape
     */
    layout?: string;
    /**
     * When `false`, the legend is not displayed on the printout.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#legendEnabled)
     *
     * @default true
     */
    legendEnabled?: boolean;
    /**
     * When `true`, scale is used in the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#scaleEnabled)
     *
     * @default false
     */
    scaleEnabled?: boolean;
    /**
     * The text used for the map title if the specified layout contains a title text element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#title)
     */
    title?: string;
    /**
     * Map width.This only applies when the [layout](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#layout) value is `map-only`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#width)
     */
    width?: number;
  }

  interface ScaleBar extends Widget {
    /**
     * The style for the scale bar.When `unit` is set to `dual`, the style will always be `line`.**Possible Values:** ruler | line
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar.html#style)
     */
    style: string;
    /**
     * Units to use for the scale bar.When using `dual`, the scale bar displays both metric and non-metric units.Metric values show either kilometers or meters depending on the scale, and non-metric values show either miles or feet depending on the scale.**Possible Values:** non-metric | metric | dual
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar.html#unit)
     *
     * @default non-metric
     */
    unit: string;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). Set this to linkthe widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar.html#view)
     */
    view: MapView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[ScaleBarViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar-ScaleBarViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar.html#viewModel)
     */
    viewModel: ScaleBarViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar.html#render)
     *
     *
     */
    render(): any;
  }

  interface ScaleBarConstructor {
    new (properties?: ScaleBarProperties): ScaleBar;
  }

  export const ScaleBar: ScaleBarConstructor;

  interface ScaleBarProperties extends WidgetProperties {
    /**
     * The style for the scale bar.When `unit` is set to `dual`, the style will always be `line`.**Possible Values:** ruler | line
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar.html#style)
     */
    style?: string;
    /**
     * Units to use for the scale bar.When using `dual`, the scale bar displays both metric and non-metric units.Metric values show either kilometers or meters depending on the scale, and non-metric values show either miles or feet depending on the scale.**Possible Values:** non-metric | metric | dual
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar.html#unit)
     *
     * @default non-metric
     */
    unit?: string;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html). Set this to linkthe widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar.html#view)
     */
    view?: MapViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[ScaleBarViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar-ScaleBarViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar.html#viewModel)
     */
    viewModel?: ScaleBarViewModelProperties;
  }

  interface ScaleBarViewModel extends Accessor {
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar-ScaleBarViewModel.html#view)
     */
    view: MapView;
  }

  interface ScaleBarViewModelConstructor {
    new (properties?: ScaleBarViewModelProperties): ScaleBarViewModel;
  }

  export const ScaleBarViewModel: ScaleBarViewModelConstructor;

  interface ScaleBarViewModelProperties {
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar-ScaleBarViewModel.html#view)
     */
    view?: MapViewProperties;
  }

  interface widgetsSearch extends Widget, GoTo {
    /**
     * The current active menu of the Search widget.**Possible Values:** none | suggestion | source | warning
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#activeMenu)
     *
     * @default none
     */
    activeMenu: string;
    /**
     * The [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#sources) object currently selected. Can be either a[LayerSearchSource](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html) or a module:esri/widget/Search/LocatorSearchSource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#activeSource)
     *
     * @default null
     */
    readonly activeSource: LayerSearchSource | LocatorSearchSource;
    /**
     * The selected source's index. This value is `-1` when all sources are selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#activeSourceIndex)
     *
     * @default 0
     */
    activeSourceIndex: number;
    /**
     * String value used as a hint for input text when searching on multiple sources. Seethe image below to view the location and style of this text in the context of the widget.![search-allPlaceholder](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/search-allplaceholder.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#allPlaceholder)
     *
     * @default "Find address or place"
     */
    allPlaceholder: string;
    /**
     * The combined collection of [defaultSources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#defaultSources)and [sources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#sources).The [defaultSources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#defaultSources)displays first in the Search UI.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#allSources)
     */
    readonly allSources: Collection<LayerSearchSource | LocatorSearchSource>;
    /**
     * Indicates whether to automatically select and zoom to the first geocoded result. If `false`, the[findAddressCandidates](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-find-address-candidates.htm)operation will still geocode the input string, but the top result will not be selected. To work with thegeocoded results, you can set up a [search-complete](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#event-search-complete) event handler and get the resultsthrough the event object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#autoSelect)
     *
     * @default true
     */
    autoSelect: boolean;
    /**
     * A read-only property that is a [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html)of [LayerSearchSource](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html)and/or [LocatorSearchSource](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html). This propertymay contain [ArcGIS Portal](https://enterprise.arcgis.com/en/portal/)[locators](http://enterprise.arcgis.com/en/server/latest/publish-services/windows/geocode-services.htm)and any web map or web scene [configurable search sources](http://doc.arcgis.com/en/arcgis-online/create-maps/configure-feature-search.htm).This property is used to populate the Search UI if the [sources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#sources) property is not set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#defaultSources)
     */
    readonly defaultSources: Collection<LayerSearchSource | LocatorSearchSource>;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#iconClass)
     */
    iconClass: string;
    /**
     * Indicates whether or not to include [defaultSources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#defaultSources) in the Search UI.This can be a boolean value or a function that returns an array of Search [sources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#sources).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#includeDefaultSources)
     *
     * @default true
     */
    includeDefaultSources: boolean | Function;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#locationEnabled)
     *
     * @default true
     */
    locationEnabled: boolean;
    /**
     * The maximum number of results returned by the widget if not specified by the source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#maxResults)
     *
     * @default 6
     */
    maxResults: number;
    /**
     * The maximum number of suggestions returned by the widget if not specified by the source.If working with the default[ArcGIS Online Geocoding service](https://developers.arcgis.com/rest/geocode/api-reference/overview-world-geocoding-service.htm),the default remains at `5`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#maxSuggestions)
     *
     * @default 6
     */
    maxSuggestions: number;
    /**
     * The minimum number of characters needed for the search if not specified by the source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#minSuggestCharacters)
     *
     * @default 1
     */
    minSuggestCharacters: number;
    /**
     * Indicates whether to display the [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) on feature click. The graphic canbe clicked to display a [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#popupEnabled)
     *
     * @default true
     */
    popupEnabled: boolean;
    /**
     * A customized [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) for the selected feature.Note that any [templates](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html)defined on [allSources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#allSources) take precedence over those defined directly on the template.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * It is possible to search a specified portal instance's [locator services](http://enterprise.arcgis.com/en/portal/latest/administer/windows/configure-portal-to-geocode-addresses.htm)Use this property to set this [ArcGIS Portal](https://enterprise.arcgis.com/en/portal/) instance to search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#portal)
     */
    portal: Portal;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#resultGraphic)
     */
    readonly resultGraphic: Graphic;
    /**
     * Indicates if the [resultGraphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#resultGraphic) will display at thelocation of the selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#resultGraphicEnabled)
     *
     * @default true
     */
    resultGraphicEnabled: boolean;
    /**
     * An array of objects, each containing a [SearchResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SearchResult) from the search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#results)
     */
    readonly results: any[];
    /**
     * Indicates whether to display the option to search all sources. When `true`, the "All" optionis displayed by default:![search-searchAllEnabled-true](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/search-enablesearchingall-true.png)When `false`, no option to search all sources at once is available:![search-searchAllEnabled-false](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/search-enablesearchingall-false.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#searchAllEnabled)
     *
     * @default true
     */
    searchAllEnabled: boolean;
    /**
     * The value of the search box input text string.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#searchTerm)
     */
    searchTerm: string;
    /**
     * The result selected from a search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#selectedResult)
     */
    readonly selectedResult: SearchResult;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#sources)
     */
    sources: Collection<SearchSource>;
    /**
     * An array of results from the [suggest method](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#suggest).This is available if working with a 10.3 or greater geocoding service that has [suggest capabilityloaded](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-suggest.htm) or a10.3 or greater feature layer that supports pagination, i.e. `supportsPagination = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#suggestions)
     */
    readonly suggestions: SuggestResult[];
    /**
     * Enable suggestions for the widget.This is only available if working with a 10.3 or greater geocoding service that has [suggest capabilityloaded](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-suggest.htm) or a 10.3 or greater feature layer that supports pagination, i.e. `supportsPagination = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#suggestionsEnabled)
     *
     * @default true
     */
    suggestionsEnabled: boolean;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[SearchViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#viewModel)
     */
    viewModel: SearchViewModel;

    /**
     * Unfocuses the widget's text input.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#blur)
     *
     *
     */
    blur(): void;
    /**
     * Clears the current searchTerm, search results, suggest results, graphic, and graphics layer.It also hides any open menus.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#clear)
     *
     *
     */
    clear(): void;
    /**
     * Brings focus to the widget's text input.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#focus)
     *
     *
     */
    focus(): void;
    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#render)
     *
     *
     */
    render(): any;
    /**
     * Depending on the sources specified, search() queries the feature layer(s) and/or performsaddress matching using any specified [Locator(s)](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html) andreturns any applicable results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#search)
     *
     * @param searchTerm This searchTerm can be       a string, geometry, suggest candidate object, or an array of [longitude,latitude] coordinate pairs.       If a geometry is supplied, then it will reverse geocode (locator) or       findAddressCandidates with geometry instead of text.
     *
     */
    search(searchTerm?: string | Geometry | SuggestResult | number[][]): IPromise<SearchResponse>;
    /**
     * Performs a suggest() request on the active Locator. It also uses the current value ofthe widget or one that is passed in.Suggestions are available if working with a 10.3 or greater geocoding service that has[suggest capabilityloaded](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-suggest.htm) or a 10.3 or greater feature layer that supports pagination, i.e.`supportsPagination = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#suggest)
     *
     * @param value The string value used to suggest() on an active Locator or feature layer. If                        nothing is passed in, takes the current value of the widget.
     *
     */
    suggest(value?: string): IPromise<SuggestResponse>;
  }

  interface widgetsSearchConstructor {
    new (properties?: widgetsSearchProperties): widgetsSearch;
  }

  export const widgetsSearch: widgetsSearchConstructor;

  interface widgetsSearchProperties extends WidgetProperties, GoToProperties {
    /**
     * The current active menu of the Search widget.**Possible Values:** none | suggestion | source | warning
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#activeMenu)
     *
     * @default none
     */
    activeMenu?: string;
    /**
     * The selected source's index. This value is `-1` when all sources are selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#activeSourceIndex)
     *
     * @default 0
     */
    activeSourceIndex?: number;
    /**
     * String value used as a hint for input text when searching on multiple sources. Seethe image below to view the location and style of this text in the context of the widget.![search-allPlaceholder](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/search-allplaceholder.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#allPlaceholder)
     *
     * @default "Find address or place"
     */
    allPlaceholder?: string;
    /**
     * Indicates whether to automatically select and zoom to the first geocoded result. If `false`, the[findAddressCandidates](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-find-address-candidates.htm)operation will still geocode the input string, but the top result will not be selected. To work with thegeocoded results, you can set up a [search-complete](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#event-search-complete) event handler and get the resultsthrough the event object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#autoSelect)
     *
     * @default true
     */
    autoSelect?: boolean;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#iconClass)
     */
    iconClass?: string;
    /**
     * Indicates whether or not to include [defaultSources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#defaultSources) in the Search UI.This can be a boolean value or a function that returns an array of Search [sources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#sources).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#includeDefaultSources)
     *
     * @default true
     */
    includeDefaultSources?: boolean | Function;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#locationEnabled)
     *
     * @default true
     */
    locationEnabled?: boolean;
    /**
     * The maximum number of results returned by the widget if not specified by the source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#maxResults)
     *
     * @default 6
     */
    maxResults?: number;
    /**
     * The maximum number of suggestions returned by the widget if not specified by the source.If working with the default[ArcGIS Online Geocoding service](https://developers.arcgis.com/rest/geocode/api-reference/overview-world-geocoding-service.htm),the default remains at `5`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#maxSuggestions)
     *
     * @default 6
     */
    maxSuggestions?: number;
    /**
     * The minimum number of characters needed for the search if not specified by the source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#minSuggestCharacters)
     *
     * @default 1
     */
    minSuggestCharacters?: number;
    /**
     * Indicates whether to display the [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) on feature click. The graphic canbe clicked to display a [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#popupEnabled)
     *
     * @default true
     */
    popupEnabled?: boolean;
    /**
     * A customized [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) for the selected feature.Note that any [templates](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html)defined on [allSources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#allSources) take precedence over those defined directly on the template.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * It is possible to search a specified portal instance's [locator services](http://enterprise.arcgis.com/en/portal/latest/administer/windows/configure-portal-to-geocode-addresses.htm)Use this property to set this [ArcGIS Portal](https://enterprise.arcgis.com/en/portal/) instance to search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#portal)
     */
    portal?: PortalProperties;
    /**
     * Indicates if the [resultGraphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#resultGraphic) will display at thelocation of the selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#resultGraphicEnabled)
     *
     * @default true
     */
    resultGraphicEnabled?: boolean;
    /**
     * Indicates whether to display the option to search all sources. When `true`, the "All" optionis displayed by default:![search-searchAllEnabled-true](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/search-enablesearchingall-true.png)When `false`, no option to search all sources at once is available:![search-searchAllEnabled-false](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/search-enablesearchingall-false.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#searchAllEnabled)
     *
     * @default true
     */
    searchAllEnabled?: boolean;
    /**
     * The value of the search box input text string.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#searchTerm)
     */
    searchTerm?: string;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#sources)
     */
    sources?: CollectionProperties<SearchSourceProperties>;
    /**
     * Enable suggestions for the widget.This is only available if working with a 10.3 or greater geocoding service that has [suggest capabilityloaded](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-suggest.htm) or a 10.3 or greater feature layer that supports pagination, i.e. `supportsPagination = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#suggestionsEnabled)
     *
     * @default true
     */
    suggestionsEnabled?: boolean;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[SearchViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#viewModel)
     */
    viewModel?: SearchViewModelProperties;
  }

  interface LayerSearchSource extends SearchSource, JSONSupport {
    /**
     * The results are displayed using this field. Defaultsto the layer's `displayField` or the first string field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#displayField)
     */
    displayField: string;
    /**
     * Indicates to only return results that match thesearch value exactly.This property only applies to `string` field searches. `exactMatch` is always`true` when searching fields of type `number`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#exactMatch)
     *
     * @default false
     */
    exactMatch: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#layer)
     */
    layer: Layer;
    /**
     * The name of the source for display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#name)
     */
    name: string;
    /**
     * An array of string values representing thenames of fields in the feature layer to search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#searchFields)
     */
    searchFields: string[];
    /**
     * A template string used to display multiplefields in a defined order when results are displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#searchTemplate)
     */
    searchTemplate: string;
    /**
     * A template string used to display multiplefields in a defined orderwhen suggestions are displayed. This takes precedence over `displayField`.Field names in the template must have the followingformat: `{FieldName}`. An example suggestionTemplate could look somethinglike: `Name: {OWNER}, Parcel: {PARCEL_ID}`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#suggestionTemplate)
     */
    suggestionTemplate: string;

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#clone)
     *
     *
     */
    clone(): LayerSearchSource;
  }

  interface LayerSearchSourceConstructor {
    new (properties?: LayerSearchSourceProperties): LayerSearchSource;

    fromJSON(json: any): LayerSearchSource;
  }

  export const LayerSearchSource: LayerSearchSourceConstructor;

  interface LayerSearchSourceProperties extends SearchSourceProperties {
    /**
     * The results are displayed using this field. Defaultsto the layer's `displayField` or the first string field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#displayField)
     */
    displayField?: string;
    /**
     * Indicates to only return results that match thesearch value exactly.This property only applies to `string` field searches. `exactMatch` is always`true` when searching fields of type `number`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#exactMatch)
     *
     * @default false
     */
    exactMatch?: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#layer)
     */
    layer?: LayerProperties;
    /**
     * The name of the source for display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#name)
     */
    name?: string;
    /**
     * An array of string values representing thenames of fields in the feature layer to search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#searchFields)
     */
    searchFields?: string[];
    /**
     * A template string used to display multiplefields in a defined order when results are displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#searchTemplate)
     */
    searchTemplate?: string;
    /**
     * A template string used to display multiplefields in a defined orderwhen suggestions are displayed. This takes precedence over `displayField`.Field names in the template must have the followingformat: `{FieldName}`. An example suggestionTemplate could look somethinglike: `Name: {OWNER}, Parcel: {PARCEL_ID}`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#suggestionTemplate)
     */
    suggestionTemplate?: string;
  }

  interface LocatorSearchSource extends SearchSource, JSONSupport {
    /**
     * A string array which limits the results to oneor more categories. For example, `Populated Place` or`airport`. Only applicable when using theWorld Geocode Service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#categories)
     */
    categories: string[];
    /**
     * Constricts search results to a specified country code.For example, `US` for United States or `SE` for Sweden.Only applies to the World Geocode Service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#countryCode)
     */
    countryCode: string;
    /**
     * Define the type of location, either `"street"` or `"rooftop"`, of the point returned from the[World Geocoding Service](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-category-filtering.htm).**Possible Values:** rooftop | street | null
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#locationType)
     *
     * @default null
     */
    locationType: string;
    /**
     * The locator task used to search. Thisis **required** and defaults to the[World Geocoding Service](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-category-filtering.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#locator)
     */
    locator: Locator;
    /**
     * The name of the source for display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#name)
     */
    name: string;
    /**
     * A template string used to display multiplefields in a defined order when results are displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#searchTemplate)
     */
    searchTemplate: string;
    /**
     * The field name of the Single Line AddressField in the REST services directory for the locator service.Common values are `SingleLine` and `SingleLineFieldName`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#singleLineFieldName)
     */
    singleLineFieldName: string;

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#clone)
     *
     *
     */
    clone(): LocatorSearchSource;
  }

  interface LocatorSearchSourceConstructor {
    new (properties?: LocatorSearchSourceProperties): LocatorSearchSource;

    fromJSON(json: any): LocatorSearchSource;
  }

  export const LocatorSearchSource: LocatorSearchSourceConstructor;

  interface LocatorSearchSourceProperties extends SearchSourceProperties {
    /**
     * A string array which limits the results to oneor more categories. For example, `Populated Place` or`airport`. Only applicable when using theWorld Geocode Service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#categories)
     */
    categories?: string[];
    /**
     * Constricts search results to a specified country code.For example, `US` for United States or `SE` for Sweden.Only applies to the World Geocode Service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#countryCode)
     */
    countryCode?: string;
    /**
     * Define the type of location, either `"street"` or `"rooftop"`, of the point returned from the[World Geocoding Service](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-category-filtering.htm).**Possible Values:** rooftop | street | null
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#locationType)
     *
     * @default null
     */
    locationType?: string;
    /**
     * The locator task used to search. Thisis **required** and defaults to the[World Geocoding Service](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-category-filtering.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#locator)
     */
    locator?: LocatorProperties;
    /**
     * The name of the source for display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#name)
     */
    name?: string;
    /**
     * A template string used to display multiplefields in a defined order when results are displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#searchTemplate)
     */
    searchTemplate?: string;
    /**
     * The field name of the Single Line AddressField in the REST services directory for the locator service.Common values are `SingleLine` and `SingleLineFieldName`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#singleLineFieldName)
     */
    singleLineFieldName?: string;
  }

  interface SearchResultRenderer extends Widget {
    /**
     * Indicates whether to display the `Show more results` link within the search result's popup.A value of `true` will not display the link in the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchResultRenderer.html#showMoreResultsOpen)
     *
     * @default false
     */
    showMoreResultsOpen: boolean;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[SearchViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchResultRenderer.html#viewModel)
     */
    viewModel: SearchViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchResultRenderer.html#render)
     *
     *
     */
    render(): any;
  }

  interface SearchResultRendererConstructor {
    new (properties?: SearchResultRendererProperties): SearchResultRenderer;
  }

  export const SearchResultRenderer: SearchResultRendererConstructor;

  interface SearchResultRendererProperties extends WidgetProperties {
    /**
     * Indicates whether to display the `Show more results` link within the search result's popup.A value of `true` will not display the link in the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchResultRenderer.html#showMoreResultsOpen)
     *
     * @default false
     */
    showMoreResultsOpen?: boolean;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[SearchViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchResultRenderer.html#viewModel)
     */
    viewModel?: SearchViewModelProperties;
  }

  interface SearchSource extends JSONSupport {
    /**
     * Indicates whether to automatically navigate to theselected result once selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#autoNavigate)
     *
     * @default true
     */
    autoNavigate: boolean;
    /**
     * This property replaces the now deprecated `searchQueryParams`, `suggestQueryParams`, and `searchExtent`properties. Please see the object specification table below for details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#filter)
     */
    filter: SearchSourceFilter;
    /**
     * Indicates the maximum number of search results to return.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#maxResults)
     *
     * @default 6
     */
    maxResults: number;
    /**
     * Indicates the maximum number of suggestionsto return for the widget's input.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#maxSuggestions)
     *
     * @default 6
     */
    maxSuggestions: number;
    /**
     * Indicates the minimum number of charactersrequired before querying for a suggestion.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#minSuggestCharacters)
     *
     * @default 1
     */
    minSuggestCharacters: number;
    /**
     * Specifies the fields returned with the search results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#outFields)
     */
    outFields: string[];
    /**
     * Used as a hint for the source input text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#placeholder)
     */
    placeholder: string;
    /**
     * Indicates whether to display a[Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) when a selected result is clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#popupEnabled)
     */
    popupEnabled: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * Specify this to prefix the user's input of the search text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#prefix)
     */
    prefix: string;
    /**
     * Indicates whether to show a graphic on themap for the selected source using the [resultSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#resultSymbol).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#resultGraphicEnabled)
     */
    resultGraphicEnabled: boolean;
    /**
     * The symbol used to display the result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#resultSymbol)
     */
    resultSymbol: Symbol;
    /**
     * Specify this to add a suffix to the user's input for the search value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#suffix)
     */
    suffix: string;
    /**
     * Indicates whether to display suggestionsas the user enters input text in the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#suggestionsEnabled)
     *
     * @default true
     */
    suggestionsEnabled: boolean;
    /**
     * Indicates whether to constrain the searchresults to the view's extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#withinViewEnabled)
     *
     * @default false
     */
    withinViewEnabled: boolean;
    /**
     * The set zoom scale for the resulting search result.This scale is automatically honored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#zoomScale)
     */
    zoomScale: number;

    /**
     * Method to provide parameters for a given search source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#getResults)
     *
     * @param resultsParams An object that is passed as a parameter to get search results.
     *
     */
    getResults(resultsParams: GetResultsParameters): IPromise<SearchResult[]>;
    /**
     * Method to provide parameters for search suggestions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#getSuggestions)
     *
     * @param suggestionsParams An object that is passed as a parameter for search suggestions.
     *
     */
    getSuggestions(suggestionsParams: GetSuggestionsParameters): IPromise<SuggestResult[]>;
  }

  interface SearchSourceConstructor {
    new (properties?: SearchSourceProperties): SearchSource;

    fromJSON(json: any): SearchSource;
  }

  export const SearchSource: SearchSourceConstructor;

  interface SearchSourceProperties {
    /**
     * Indicates whether to automatically navigate to theselected result once selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#autoNavigate)
     *
     * @default true
     */
    autoNavigate?: boolean;
    /**
     * This property replaces the now deprecated `searchQueryParams`, `suggestQueryParams`, and `searchExtent`properties. Please see the object specification table below for details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#filter)
     */
    filter?: SearchSourceFilter;
    /**
     * Indicates the maximum number of search results to return.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#maxResults)
     *
     * @default 6
     */
    maxResults?: number;
    /**
     * Indicates the maximum number of suggestionsto return for the widget's input.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#maxSuggestions)
     *
     * @default 6
     */
    maxSuggestions?: number;
    /**
     * Indicates the minimum number of charactersrequired before querying for a suggestion.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#minSuggestCharacters)
     *
     * @default 1
     */
    minSuggestCharacters?: number;
    /**
     * Specifies the fields returned with the search results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#outFields)
     */
    outFields?: string[];
    /**
     * Used as a hint for the source input text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#placeholder)
     */
    placeholder?: string;
    /**
     * Indicates whether to display a[Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) when a selected result is clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#popupEnabled)
     */
    popupEnabled?: boolean;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * Specify this to prefix the user's input of the search text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#prefix)
     */
    prefix?: string;
    /**
     * Indicates whether to show a graphic on themap for the selected source using the [resultSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#resultSymbol).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#resultGraphicEnabled)
     */
    resultGraphicEnabled?: boolean;
    /**
     * The symbol used to display the result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#resultSymbol)
     */
    resultSymbol?: SymbolProperties;
    /**
     * Specify this to add a suffix to the user's input for the search value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#suffix)
     */
    suffix?: string;
    /**
     * Indicates whether to display suggestionsas the user enters input text in the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#suggestionsEnabled)
     *
     * @default true
     */
    suggestionsEnabled?: boolean;
    /**
     * Indicates whether to constrain the searchresults to the view's extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#withinViewEnabled)
     *
     * @default false
     */
    withinViewEnabled?: boolean;
    /**
     * The set zoom scale for the resulting search result.This scale is automatically honored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#zoomScale)
     */
    zoomScale?: number;
  }

  /**
   * Specifies the object that is passed as a parameter to [getResults()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#getResults).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#GetResultsParameters)
   */
  export interface GetResultsParameters extends Object {
    /**
     * The key field used to find the result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#GetResultsParameters)
     */
    exactMatch?: boolean;
    /**
     * The location value used by the Search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#GetResultsParameters)
     */
    location?: Point;
    /**
     * Indicates the maximum number of search results to return.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#GetResultsParameters)
     */
    maxResults?: number;
    /**
     * Indicates the index of the search source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#GetResultsParameters)
     */
    sourceIndex?: number;
    /**
     * Indicates the Spatial Refeference defined by the source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#GetResultsParameters)
     */
    spatialReference?: SpatialReference;
    /**
     * Indicates the Suggest Result that triggered the search for a result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#GetResultsParameters)
     */
    suggestResult?: SuggestResult;
    /**
     * Indicates the view provided to the Search Widget using the source.
     *
     * [Read more...](global.html)
     */
    view?: MapView | SceneView;
  }

  /**
   * Specifies the object that is passed as a parameter to [getSuggestions()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#getSuggestions).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#GetSuggestionsParameters)
   */
  export interface GetSuggestionsParameters extends Object {
    /**
     * Indicates the maximum number of suggestions to return for the widget's input.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#GetSuggestionsParameters)
     */
    maxSuggestions?: number;
    /**
     * Indicates the index of the search source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#GetSuggestionsParameters)
     */
    sourceIndex?: number;
    /**
     * Indicates the Spatial Refeference defined by the source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#GetSuggestionsParameters)
     */
    spatialReference?: SpatialReference;
    /**
     * Indicates search term used to find a suggestion.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#GetSuggestionsParameters)
     */
    suggestTerm?: string;
    /**
     * Indicates the view provided to the Search Widget using the source.
     *
     * [Read more...](global.html)
     */
    view?: MapView | SceneView;
  }

  export interface SearchSourceFilter extends Object {
    /**
     * The where clause specified for filtering suggests or search results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#filter)
     */
    where?: string;
    /**
     * The filter geometry for suggests or search results.[Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) is the only supported geometry when working with [locator](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html) sources.See [Find Address Candidates](https://developers.arcgis.com/rest/services-reference/find-address-candidates.htm) for additional information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#filter)
     */
    geometry?: Geometry;
  }

  interface SearchViewModel extends Accessor, Evented, GoTo {
    /**
     * The [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#sources) object currently selected. Can be either a[feature layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) or a [locator task](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#activeSource)
     */
    readonly activeSource: LayerSearchSource | LocatorSearchSource;
    /**
     * The selected source's index. This value is `-1` when all sources are selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#activeSourceIndex)
     *
     * @default 0
     */
    activeSourceIndex: number;
    /**
     * String value used as a hint for input text when searching on multiple sources. Seethe image below to view the location and style of this text in the context of the widget.![search-allPlaceholder](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/search-allplaceholder.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#allPlaceholder)
     *
     * @default "Find address or place"
     */
    allPlaceholder: string;
    /**
     * The combined collection of [defaultSources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#defaultSources)and [sources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#sources).The [defaultSources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#defaultSources)displays first in the Search UI.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#allSources)
     */
    readonly allSources: Collection<LayerSearchSource | LocatorSearchSource>;
    /**
     * Indicates whether to automatically select and zoom to the first geocoded result. If `false`, the[findAddressCandidates](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-find-address-candidates.htm)operation will still geocode the input string, but the top result will not be selected. To work with thegeocoded results, you can set up a [search-complete](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#event-search-complete) event handler and get the resultsthrough the event object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#autoSelect)
     *
     * @default true
     */
    autoSelect: boolean;
    /**
     * A read-only property that is a [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html)of [LayerSearchSource](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html)and/or [LocatorSearchSource](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html). This propertymay contain [ArcGIS Portal](https://enterprise.arcgis.com/en/portal/)[locators](http://enterprise.arcgis.com/en/server/latest/publish-services/windows/geocode-services.htm)and any web map or web scene [configurable search sources](http://doc.arcgis.com/en/arcgis-online/create-maps/configure-feature-search.htm).This property is used to populate the Search UI if the [sources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#sources) property is not set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#defaultSources)
     */
    readonly defaultSources: Collection<LayerSearchSource | LocatorSearchSource>;
    /**
     * The default [symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol.html) for the search result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#defaultSymbol)
     *
     * @default PictureMarkerSymbol
     */
    defaultSymbol: Symbol;
    /**
     * Indicates whether or not to include [defaultSources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#defaultSources) in the Search UI.This can be a boolean value or a function that returns an array of Search [sources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#sources).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#includeDefaultSources)
     *
     * @default true
     */
    includeDefaultSources: boolean | Function;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#locationEnabled)
     */
    locationEnabled: boolean;
    /**
     * The maximum character length of the search text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#maxInputLength)
     *
     * @default 128
     */
    maxInputLength: number;
    /**
     * The maximum number of results returned by the widget if not specified by the source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#maxResults)
     *
     * @default 6
     */
    maxResults: number;
    /**
     * The maximum number of suggestions returned by the widget if not specified by the source.If working with the default[ArcGIS Online Geocoding service](https://developers.arcgis.com/rest/geocode/api-reference/overview-world-geocoding-service.htm),the default remains at `5`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#maxSuggestions)
     *
     * @default 6
     */
    maxSuggestions: number;
    /**
     * The minimum number of characters needed for the search if not specified by the source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#minSuggestCharacters)
     *
     * @default 1
     */
    minSuggestCharacters: number;
    /**
     * The placeholder used by the [activeSource](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#activeSource).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#placeholder)
     */
    readonly placeholder: string;
    /**
     * Indicates whether to display the [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) on feature click. The graphic canbe clicked to display a [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#popupEnabled)
     *
     * @default true
     */
    popupEnabled: boolean;
    /**
     * A customized [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) for the selected feature.Note that any [templates](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html)defined on [allSources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#allSources) take precedence over those defined directly on the template.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#popupTemplate)
     *
     * @default null
     */
    popupTemplate: PopupTemplate;
    /**
     * It is possible to search a specified portal instance's [locator services](http://enterprise.arcgis.com/en/portal/latest/administer/windows/configure-portal-to-geocode-addresses.htm)Use this property to set this [ArcGIS Portal](https://enterprise.arcgis.com/en/portal/) instance to search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#portal)
     */
    portal: Portal;
    /**
     * The graphic used to highlight the resulting feature or location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#resultGraphic)
     *
     * @default null
     */
    readonly resultGraphic: Graphic;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#resultGraphicEnabled)
     *
     * @default true
     */
    resultGraphicEnabled: boolean;
    /**
     * An array of current results from the search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#results)
     *
     * @default null
     */
    readonly results: any[];
    /**
     * Indicates whether to display the option to search all sources. When `true`, the "All" optionis displayed by default:![search-searchAllEnabled-true](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/search-enablesearchingall-true.png)When `false`, no option to search all sources at once is available:![search-searchAllEnabled-true-false](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/search-enablesearchingall-false.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#searchAllEnabled)
     *
     * @default true
     */
    searchAllEnabled: boolean;
    /**
     * The value of the search box input text string.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#searchTerm)
     */
    searchTerm: string;
    /**
     * The result selected from a search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#selectedResult)
     *
     * @default null
     */
    readonly selectedResult: any;
    /**
     * The selected SuggestResult.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#selectedSuggestion)
     *
     * @default null
     */
    readonly selectedSuggestion: Geometry | SearchViewModelSuggestResult;
    /**
     * The Search widget may be used to search features in a[Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) or geocode locations with a[Locator](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html). The `sources` property defines the sources from whichto search for the [view](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#view) specified by the Search widget instance.There are two types of sources:* [LayerSearchSource](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html)* [LocatorSearchSource](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html)Any combination of these sources may be usedtogether in the same instance of the Search widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#sources)
     */
    sources: Collection<LayerSearchSource | LocatorSearchSource>;
    /**
     * The current state of the widget. This property was removed from [Search](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html)and should now be accessed within the [SearchViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html).**Possible Values:** ready | disabled | searching | loading
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#state)
     *
     * @default ready
     */
    readonly state: string;
    /**
     * The millisecond delay after keyup and before making a [suggest](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#suggest) network request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#suggestionDelay)
     *
     * @default 150
     */
    suggestionDelay: number;
    /**
     * An array of results from the [suggest method](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#suggest).This is available if working with a 10.3 or greater geocoding service that has [suggest capabilityloaded](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-suggest.htm) or a10.3 or greater feature layer that supports pagination, i.e. `supportsPagination = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#suggestions)
     *
     * @default null
     */
    readonly suggestions: SearchViewModelSuggestResult[];
    /**
     * Enable suggestions for the widget.This is only available if working with a 10.3 or greater geocoding service that has [suggest capability loaded](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-suggest.htm) or a 10.3 or greater feature layer that supports pagination, i.e. `supportsPagination = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#suggestionsEnabled)
     *
     * @default true
     */
    suggestionsEnabled: boolean;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#view)
     *
     * @default null
     */
    view: MapView | SceneView;

    /**
     * Clears the current value, search results, suggest results, graphic, and graphics layer.It also hides any open menus.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#clear)
     *
     *
     */
    clear(): void;
    /**
     * Depending on the sources specified, `search()` queries the feature layer(s) and/or performsaddress matching using any specified [Locator(s)](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html) andreturns the applicable results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#search)
     *
     * @param searchTerm This searchTerm can be       a string, geometry, suggest candidate object, or an array of [latitude,longitude].       If a geometry is supplied, then it will reverse geocode (locator) or       findAddressCandidates with geometry instead of text (featurelayer).
     *
     */
    search(
      searchTerm?: string | Geometry | SearchViewModelSuggestResult | number[][]
    ): IPromise<SearchViewModelSearchResponse>;
    /**
     * Returns search results near your current location. It checks whether[locationEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#locationEnabled) is `true`. If so, and your browsersupports [geolocation](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/Using_geolocation),it will return search results nearby your current location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#searchNearby)
     *
     *
     */
    searchNearby(): IPromise<SearchViewModelSearchResponse>;
    /**
     * Performs a suggest() request on the active Locator. It also uses the current value ofthe widget or one that is passed in.Suggestions are available if working with a 10.3 or greater geocoding service that has[suggest capability loaded](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-suggest.htm)or a 10.3 or greater feature layer that supports pagination, i.e.`supportsPagination = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#suggest)
     *
     * @param value The string value used to suggest() on an active Locator or feature layer. If                        nothing is passed in, takes the current value of the widget.
     *
     */
    suggest(value?: string): IPromise<SearchViewModelSuggestResponse>;

    on(name: "search-clear", eventHandler: SearchViewModelSearchClearEventHandler): IHandle;

    on(name: "search-start", eventHandler: SearchViewModelSearchStartEventHandler): IHandle;

    on(name: "suggest-start", eventHandler: SearchViewModelSuggestStartEventHandler): IHandle;

    on(name: "search-complete", eventHandler: SearchViewModelSearchCompleteEventHandler): IHandle;

    on(name: "select-result", eventHandler: SearchViewModelSelectResultEventHandler): IHandle;

    on(name: "suggest-complete", eventHandler: SearchViewModelSuggestCompleteEventHandler): IHandle;
  }

  interface SearchViewModelConstructor {
    new (properties?: SearchViewModelProperties): SearchViewModel;
  }

  export const SearchViewModel: SearchViewModelConstructor;

  interface SearchViewModelProperties extends GoToProperties {
    /**
     * The selected source's index. This value is `-1` when all sources are selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#activeSourceIndex)
     *
     * @default 0
     */
    activeSourceIndex?: number;
    /**
     * String value used as a hint for input text when searching on multiple sources. Seethe image below to view the location and style of this text in the context of the widget.![search-allPlaceholder](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/search-allplaceholder.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#allPlaceholder)
     *
     * @default "Find address or place"
     */
    allPlaceholder?: string;
    /**
     * Indicates whether to automatically select and zoom to the first geocoded result. If `false`, the[findAddressCandidates](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-find-address-candidates.htm)operation will still geocode the input string, but the top result will not be selected. To work with thegeocoded results, you can set up a [search-complete](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#event-search-complete) event handler and get the resultsthrough the event object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#autoSelect)
     *
     * @default true
     */
    autoSelect?: boolean;
    /**
     * The default [symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol.html) for the search result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#defaultSymbol)
     *
     * @default PictureMarkerSymbol
     */
    defaultSymbol?: SymbolProperties;
    /**
     * Indicates whether or not to include [defaultSources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#defaultSources) in the Search UI.This can be a boolean value or a function that returns an array of Search [sources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#sources).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#includeDefaultSources)
     *
     * @default true
     */
    includeDefaultSources?: boolean | Function;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#locationEnabled)
     */
    locationEnabled?: boolean;
    /**
     * The maximum character length of the search text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#maxInputLength)
     *
     * @default 128
     */
    maxInputLength?: number;
    /**
     * The maximum number of results returned by the widget if not specified by the source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#maxResults)
     *
     * @default 6
     */
    maxResults?: number;
    /**
     * The maximum number of suggestions returned by the widget if not specified by the source.If working with the default[ArcGIS Online Geocoding service](https://developers.arcgis.com/rest/geocode/api-reference/overview-world-geocoding-service.htm),the default remains at `5`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#maxSuggestions)
     *
     * @default 6
     */
    maxSuggestions?: number;
    /**
     * The minimum number of characters needed for the search if not specified by the source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#minSuggestCharacters)
     *
     * @default 1
     */
    minSuggestCharacters?: number;
    /**
     * Indicates whether to display the [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) on feature click. The graphic canbe clicked to display a [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#popupEnabled)
     *
     * @default true
     */
    popupEnabled?: boolean;
    /**
     * A customized [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) for the selected feature.Note that any [templates](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html)defined on [allSources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#allSources) take precedence over those defined directly on the template.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#popupTemplate)
     *
     * @default null
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * It is possible to search a specified portal instance's [locator services](http://enterprise.arcgis.com/en/portal/latest/administer/windows/configure-portal-to-geocode-addresses.htm)Use this property to set this [ArcGIS Portal](https://enterprise.arcgis.com/en/portal/) instance to search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#portal)
     */
    portal?: PortalProperties;
    /**
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#resultGraphicEnabled)
     *
     * @default true
     */
    resultGraphicEnabled?: boolean;
    /**
     * Indicates whether to display the option to search all sources. When `true`, the "All" optionis displayed by default:![search-searchAllEnabled-true](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/search-enablesearchingall-true.png)When `false`, no option to search all sources at once is available:![search-searchAllEnabled-true-false](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/search-enablesearchingall-false.png)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#searchAllEnabled)
     *
     * @default true
     */
    searchAllEnabled?: boolean;
    /**
     * The value of the search box input text string.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#searchTerm)
     */
    searchTerm?: string;
    /**
     * The Search widget may be used to search features in a[Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) or geocode locations with a[Locator](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html). The `sources` property defines the sources from whichto search for the [view](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#view) specified by the Search widget instance.There are two types of sources:* [LayerSearchSource](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html)* [LocatorSearchSource](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html)Any combination of these sources may be usedtogether in the same instance of the Search widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#sources)
     */
    sources?: CollectionProperties<LayerSearchSourceProperties | LocatorSearchSourceProperties>;
    /**
     * The millisecond delay after keyup and before making a [suggest](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#suggest) network request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#suggestionDelay)
     *
     * @default 150
     */
    suggestionDelay?: number;
    /**
     * Enable suggestions for the widget.This is only available if working with a 10.3 or greater geocoding service that has [suggest capability loaded](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-suggest.htm) or a 10.3 or greater feature layer that supports pagination, i.e. `supportsPagination = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#suggestionsEnabled)
     *
     * @default true
     */
    suggestionsEnabled?: boolean;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#view)
     *
     * @default null
     */
    view?: MapViewProperties | SceneViewProperties;
  }

  export interface SearchViewModelSearchClearEvent {}

  export interface SearchViewModelSearchCompleteEvent {
    activeSourceIndex: number;

    errors: Error[];

    numResults: number;

    results: SearchViewModelSearchCompleteEventResults[];

    searchTerm: string;
  }

  /**
   * When resolved, returns this response after calling [search](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#search).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SearchResponse)
   */
  export interface SearchViewModelSearchResponse extends Object {
    /**
     * The index of the source from which the search result was obtained.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SearchResponse)
     */
    activeSourceIndex: number;
    /**
     * An array of error objects returned from the search results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SearchResponse)
     */
    errors: Error[];
    /**
     * The number of search results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SearchResponse)
     */
    numResults: number;
    /**
     * The searched expression
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SearchResponse)
     */
    searchTerm: string;
    /**
     * An array of objects representing the results of search. See object specificationtable below for more information about the result object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SearchResponse)
     */
    results: SearchViewModelSearchResponseResults[];
  }

  /**
   * The result object returned from the [search](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#search).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SearchResult)
   */
  export interface SearchViewModelSearchResult extends Object {
    /**
     * The extent, or bounding box, of the returned feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SearchResult)
     */
    extent: Extent;
    /**
     * The resulting feature or location obtained from the search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SearchResult)
     */
    feature: Graphic;
    /**
     * The name of the result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SearchResult)
     */
    name: string;
  }

  export interface SearchViewModelSearchStartEvent {}

  export interface SearchViewModelSelectResultEvent {
    result: SearchViewModelSelectResultEventResult;

    source: any;

    sourceIndex: number;
  }

  export interface SearchViewModelSuggestCompleteEvent {
    activeSourceIndex: number;

    errors: Error[];

    numResults: number;

    results: SearchViewModelSuggestCompleteEventResults[];

    searchTerm: string;
  }

  /**
   * When resolved, returns this response after calling [suggest](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#suggest).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SuggestResponse)
   */
  export interface SearchViewModelSuggestResponse extends Object {
    /**
     * The index of the source from which suggestions are obtained. This value is `-1` when all sources are selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SuggestResponse)
     */
    activeSourceIndex: number;
    /**
     * An array of error objects returned from the suggest results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SuggestResponse)
     */
    errors: Error[];
    /**
     * The number of suggest results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SuggestResponse)
     */
    numResults: number;
    /**
     * The search expression used for the suggest.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SuggestResponse)
     */
    searchTerm: string;
    /**
     * An array of objects representing the results of suggest. See object specificationtable below for more information about the result object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SuggestResponse)
     */
    results: SearchViewModelSuggestResponseResults[];
  }

  /**
   * The result object returned from a [suggest](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#suggest).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SuggestResult)
   */
  export interface SearchViewModelSuggestResult extends Object {
    /**
     * The key related to the suggest result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SuggestResult)
     */
    key: string;
    /**
     * The string name of the suggested location to geocode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SuggestResult)
     */
    text: string;
    /**
     * The index of the currently selected result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SuggestResult)
     */
    sourceIndex: number;
  }

  export interface SearchViewModelSuggestStartEvent {}

  export interface SearchViewModelSearchCompleteEventResults extends Object {
    results: SearchResult[];

    sourceIndex: number;

    source: any[];
  }

  export interface SearchViewModelSearchResponseResults extends Object {
    /**
     * An array of search results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SearchResponse)
     */
    results: SearchViewModelSearchResult[];
    /**
     * The index of the currently selected source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SearchResponse)
     */
    sourceIndex: number;
    /**
     * The [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#sources) of the selected result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SearchResponse)
     */
    source: any;
  }

  export interface SearchViewModelSelectResultEventResult extends Object {
    extent: Extent;

    feature: Graphic;

    name: string;
  }

  export interface SearchViewModelSuggestCompleteEventResults extends Object {
    results: SearchViewModelSuggestResult[];

    sourceIndex: number;

    source: any;
  }

  export interface SearchViewModelSuggestResponseResults extends Object {
    /**
     * An array of suggest results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SuggestResponse)
     */
    results: SearchViewModelSuggestResult[];
    /**
     * The index of the currently selected source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SuggestResponse)
     */
    sourceIndex: number;
    /**
     * The [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#sources) of the selected result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#SuggestResponse)
     */
    source: any;
  }

  /**
   * When resolved, returns this response after calling [search](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#search).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SearchResponse)
   */
  export interface SearchResponse extends Object {
    /**
     * The index of the source from which the search result was obtained.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SearchResponse)
     */
    activeSourceIndex: number;
    /**
     * An array of error objects returned from the search results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SearchResponse)
     */
    errors: Error[];
    /**
     * The number of search results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SearchResponse)
     */
    numResults: number;
    /**
     * The searched expression
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SearchResponse)
     */
    searchTerm: string;
    /**
     * An array of objects representing the results of search. See object specificationtable below for more information about the result object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SearchResponse)
     */
    results: SearchResponseResults[];
  }

  /**
   * The result object returned from a [search()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#search).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SearchResult)
   */
  export interface SearchResult extends Object {
    /**
     * The extent, or bounding box, of the returned feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SearchResult)
     */
    extent: Extent;
    /**
     * The resulting feature or location obtained from the search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SearchResult)
     */
    feature: Graphic;
    /**
     * The name of the result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SearchResult)
     */
    name: string;
  }

  /**
   * When resolved, returns this response after calling [suggest](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#suggest).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SuggestResponse)
   */
  export interface SuggestResponse extends Object {
    /**
     * The index of the source from which suggestions are obtained. This value is `-1` when all sources are selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SuggestResponse)
     */
    activeSourceIndex: number;
    /**
     * An array of error objects returned from the suggest results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SuggestResponse)
     */
    errors: Error[];
    /**
     * The number of suggest results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SuggestResponse)
     */
    numResults: number;
    /**
     * The search expression used for the suggest.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SuggestResponse)
     */
    searchTerm: string;
    /**
     * An array of objects representing the results of suggest. See object specificationtable below for more information about the result object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SuggestResponse)
     */
    results: SuggestResponseResults[];
  }

  /**
   * The result object returned from a [suggest()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#suggest).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SuggestResult)
   */
  export interface SuggestResult extends Object {
    /**
     * The key related to the suggest result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SuggestResult)
     */
    key: string;
    /**
     * The string name of the suggested location to geocode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SuggestResult)
     */
    text: string;
    /**
     * The index of the currently selected result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SuggestResult)
     */
    sourceIndex: number;
  }

  export interface SearchResponseResults extends Object {
    /**
     * An array of search results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SearchResponse)
     */
    results: SearchResult[];
    /**
     * The index of the currently selected source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SearchResponse)
     */
    sourceIndex: number;
    /**
     * The [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#sources) of the selected result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SearchResponse)
     */
    source: any;
  }

  export interface SuggestResponseResults extends Object {
    /**
     * An array of suggest results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SuggestResponse)
     */
    results: SuggestResult[];
    /**
     * The index of the currently selected source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SuggestResponse)
     */
    sourceIndex: number;
    /**
     * The [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#sources) of the selected result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SuggestResponse)
     */
    source: any;
  }

  interface Sketch extends Widget {
    /**
     * When creating new graphics (for example after [create()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#create) has been called),this property reflects the create tool being used. When updating graphics(for example after [update()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#update) has been called), this property reflects theupdate tool being used. If no create or update operation is in progress, this is `null`.**Possible Values:** point | polyline | polygon | circle | rectangle | move | transform | reshape
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#activeTool)
     */
    readonly activeTool: string;
    /**
     * Property controlling the visibility and order of create tool buttons.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#availableCreateTools)
     *
     * @default ["point", "polyline", "polygon", "rectangle", "circle"]
     */
    availableCreateTools: string[];
    /**
     * The graphic that is being created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#createGraphic)
     */
    readonly createGraphic: Graphic;
    /**
     * Default update options set for the Sketch widget. Update options set on this property will be overwritten if the update options are changedwhen [update()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#update) method is called.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultUpdateOptions)
     */
    readonly defaultUpdateOptions: SketchDefaultUpdateOptions;
    /**
     * The Sketch widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#iconClass)
     */
    iconClass: string;
    /**
     * The [GraphicsLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html) associated with the Sketch widget. The Sketch widget adds new [graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) to this layer or can only update graphicsstored in this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#layer)
     */
    layer: GraphicsLayer;
    /**
     * Determines the layout/orientation of the Sketch widget.**Possible Values:** vertical | horizontal
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#layout)
     *
     * @default horizontal
     */
    layout: string;
    /**
     * The Sketch widget's state.**Possible Values:** ready | disabled | active
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#state)
     */
    readonly state: string;
    /**
     * An array of [graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) that are being updated by the Sketch widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#updateGraphics)
     */
    readonly updateGraphics: Collection<Graphic>;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the Sketch widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for the Sketch widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[SketchViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html) class to accessall properties and methods on the Sketch widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#viewModel)
     */
    viewModel: SketchViewModel;

    /**
     * Cancels the active operation and fires the [create](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#event-create) or [update](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#event-update) eventand changes the event's state to `cancel`. If called in the middle of a create operation, `cancel()` discardsthe partially created graphic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#cancel)
     *
     *
     */
    cancel(): void;
    /**
     * Completes the active operation and fires the [create](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#event-create) or [update](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#event-update) eventand changes the event's state to `complete`. If called in the middle of a create operation, `complete()` finishesthe active create operation and keeps the valid geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#complete)
     *
     *
     */
    complete(): void;
    /**
     * Create a graphic with the geometry specified in the `tool` parameter. When the first vertex of the graphic is added,the [create](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#event-create) event will start firing. The provided `tool` will become the [activeTool](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#activeTool).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#create)
     *
     * @param tool Name of the create tool. Specifies the geometry for the graphic to be created.**Possible Values:** point | polyline | polygon | rectangle | circle
     * @param createOptions Options for the graphic to be created.
     * @param createOptions.mode Specifies how the graphic can be created. The create mode applies only when creating`polygon`, `polyline`, `rectangle` and `circle` geometries.**Possible Values:**Value | Description |----- | ----------- |hybrid | Vertices are added while the pointer is clicked or dragged. Applies to and is the default for `polygon` and `polyline`.freehand | Vertices are added while the pointer is dragged. Applies to `polygon`, `polyline` `rectangle` and `circle`. Default for `rectangle` and `circle`.click | Vertices are added when the pointer is clicked.
     *
     */
    create(tool: string, createOptions?: SketchCreateCreateOptions): void;
    /**
     * Incrementally redo actions recorded in the stack. Calling this method will fire the[redo](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#event-redo) event.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#redo)
     *
     *
     */
    redo(): void;
    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#render)
     *
     *
     */
    render(): any;
    /**
     * Resets the Sketch widget to prepare for another create operation.Reset discards the current sketch, if called in middle of create operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#reset)
     *
     *
     */
    reset(): void;
    /**
     * Incrementally undo actions recorded in the stack. Calling this method will fire the[undo](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#event-undo) event.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#undo)
     *
     *
     */
    undo(): void;
    /**
     * Initializes an update operation for the specified graphic(s) and fires [update](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#event-update) event.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#update)
     *
     * @param graphics A graphic or an array of graphics to be updated. Only graphics added to SketchViewModel's [layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#layer) property can be updated.
     * @param updateOptions Update options for the graphics to be updated.
     * @param updateOptions.tool Name of the update tool. Specifies the update operation for the selected graphics. The provided tool will become the [activeTool](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#activeTool).**Possible Values:**Value | Description |----- | ----------- |transform | This is the *default* tool for graphics with a [polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) geometry, [polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) geometry or graphics that use a [3D object symbol layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html) with a [point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometry. It allows one or multiple graphics to be scaled, rotated and moved by default. Its default behavior can be changed by setting the `enableRotation`, `enableScaling` or `preserveAspectRatio` arguments when calling the `update` method or setting them on the [defaultUpdateOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultUpdateOptions) property when the Sketch widget initializes.reshape | This tool allows the entire graphic or individual vertices of the graphic to be moved. Vertices can be added or removed. This tool can only be used with a single graphic that has a [polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) or [polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) geometry.move | This is the *default* tool for graphics with a [point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometry that do not use a [3D object symbol layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html). It should be used for specific cases where you just want to move selected `polygon` and `polyline` graphics without additional options. Additionally, the `move` tool does not support toggling to different modes, since the `move` operation is built into both the `transform` and `reshape` tools by default.
     * @param updateOptions.enableRotation Indicates if the `rotation` operation will be enabled when updating graphics. Only applies if `tool` is `transform`.
     * @param updateOptions.enableScaling Indicates if the `scale` operation will be enabled when updating graphics. Only applies if `tool` is `transform`.
     * @param updateOptions.preserveAspectRatio Indicates if the uniform scale operation will be enabled when updating graphics. `enableScaling`must be set `true` when setting this property to `true`. Only applies if `tool` is `transform` and is always `true` when transforming points that use a [3D object symbol layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html).
     * @param updateOptions.toggleToolOnClick Indicates if the graphic being updated can be toggled between `transform` and `reshape` update options.
     *
     */
    update(graphics: Graphic | Graphic[], updateOptions?: SketchUpdateUpdateOptions): IPromise<void>;
  }

  interface SketchConstructor {
    new (properties?: SketchProperties): Sketch;
  }

  export const Sketch: SketchConstructor;

  interface SketchProperties extends WidgetProperties {
    /**
     * Property controlling the visibility and order of create tool buttons.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#availableCreateTools)
     *
     * @default ["point", "polyline", "polygon", "rectangle", "circle"]
     */
    availableCreateTools?: string[];
    /**
     * The Sketch widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#iconClass)
     */
    iconClass?: string;
    /**
     * The [GraphicsLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html) associated with the Sketch widget. The Sketch widget adds new [graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) to this layer or can only update graphicsstored in this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#layer)
     */
    layer?: GraphicsLayerProperties;
    /**
     * Determines the layout/orientation of the Sketch widget.**Possible Values:** vertical | horizontal
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#layout)
     *
     * @default horizontal
     */
    layout?: string;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the Sketch widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * The view model for the Sketch widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[SketchViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html) class to accessall properties and methods on the Sketch widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#viewModel)
     */
    viewModel?: SketchViewModelProperties;
  }

  interface SketchViewModel extends Accessor, Evented {
    /**
     * When creating new graphics (for example after [create()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#create) has been called),this property reflects the create tool being used. When updating graphics(for example after [update()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#update) has been called), this property reflects theupdate tool being used. If no create or update operation is in progress, this is `null`.**Possible Values:** point | multipoint | polyline | polygon | circle | rectangle | move | transform | reshape
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#activeTool)
     */
    readonly activeTool: string;
    /**
     * The graphic that is being created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#createGraphic)
     */
    readonly createGraphic: Graphic;
    /**
     * Default update options set for the SketchViewModel. Update options set on this property will be overridden by options passed tothe [update()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#update) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultUpdateOptions)
     */
    defaultUpdateOptions: SketchViewModelDefaultUpdateOptions;
    /**
     * The [GraphicsLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html) associated with the SketchViewModel. The SketchViewModel adds new [graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) to this layer or can only update graphicsstored in this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#layer)
     */
    layer: GraphicsLayer;
    /**
     * A simple marker symbol used for representing the point geometry that is being drawn.The default value is the following:```js{  type: "simple-marker",  style: "circle",  size: 6,  color: [255, 255, 255],  outline: {   color: [50, 50, 50],    width: 1  }}```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#pointSymbol)
     */
    pointSymbol: SimpleMarkerSymbol | PointSymbol3D;
    /**
     * A simple fill symbol used for representing the polygon geometry that is being drawn.The default value is the following:```js{  type: "simple-fill",  color: [150, 150, 150, 0.2],  outline: {   color: [50, 50, 50],    width: 2  }}```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#polygonSymbol)
     */
    polygonSymbol: SimpleFillSymbol | PolygonSymbol3D;
    /**
     * A simple line symbol used for representing the polyline geometry that is being drawn.The default value is the following:```js{  type: "simple-line",  color: [130, 130, 130],  width: 2}```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#polylineSymbol)
     */
    polylineSymbol: SimpleLineSymbol | LineSymbol3D;
    /**
     * The sketch view model's state.**Possible Values:** ready | disabled | active
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#state)
     */
    readonly state: string;
    /**
     * An array of graphics that are being updated by the SketchViewModel.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#updateGraphics)
     */
    readonly updateGraphics: Collection<Graphic>;
    /**
     * Indicates if a graphic can be selected to be updated. If `false`, graphics cannot selected to be updated. Set this property to `false`to add a custom [hitTest](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#hitTest) logic for [updating](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#update) graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#updateOnGraphicClick)
     */
    updateOnGraphicClick: boolean;
    /**
     * The view in which geometries will be sketched by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#view)
     */
    view: MapView | SceneView;

    /**
     * Cancels the active operation and fires the [create](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#event-create) or [update](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#event-update) eventand changes the event's state to `cancel`. If called in the middle of a create operation, `cancel()` discardsthe partially created graphic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#cancel)
     *
     *
     */
    cancel(): void;
    /**
     * Completes the active operation and fires the [create](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#event-create) or [update](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#event-update) eventand changes the event's state to `complete`. If called in the middle of a create operation, `complete()` finishesthe active create operation and keeps the valid geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#complete)
     *
     *
     */
    complete(): void;
    /**
     * Create a graphic with the geometry specified in the `tool` parameter. When the first vertex of the graphic is added,the [create](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#event-create) event will start firing. The provided `tool` will become the [activeTool](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#activeTool).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#create)
     *
     * @param tool Name of the create tool. Specifies the geometry for the graphic to be created.**Possible Values:** point | multipoint | polyline | polygon | rectangle | circle
     * @param createOptions Options for the graphic to be created.
     * @param createOptions.mode Specifies how the graphic can be created. The create mode applies only when creating`polygon`, `polyline`, `rectangle` and `circle` geometries.**Possible Values:**Value | Description |----- | ----------- |hybrid | Vertices are added while the pointer is clicked or dragged. Applies to and is the default for `polygon` and `polyline`.freehand | Vertices are added while the pointer is dragged. Applies to `polygon`, `polyline` `rectangle` and `circle`. Default for `rectangle` and `circle`.click | Vertices are added when the pointer is clicked.
     *
     */
    create(tool: string, createOptions?: SketchViewModelCreateCreateOptions): void;
    /**
     * Incrementally redo actions recorded in the stack. Calling this method will fire the[redo](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#event-redo) event.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#redo)
     *
     *
     */
    redo(): void;
    /**
     * Resets SketchViewModel to prepare for another create operation.Reset discards the current sketch, if called in middle of create operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#reset)
     *
     *
     */
    reset(): void;
    /**
     * Incrementally undo actions recorded in the stack. Calling this method will fire the[undo](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#event-undo) event.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#undo)
     *
     *
     */
    undo(): void;
    /**
     * Initializes an update operation for the specified graphic(s) and fires [update](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#event-update) event.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#update)
     *
     * @param graphics A graphic or an array of graphics to be updated. Only graphics added to SketchViewModel's [layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#layer) property can be updated.
     * @param updateOptions Update options for the graphics to be updated.
     * @param updateOptions.tool Name of the update tool. Specifies the update operation for the selected graphics. The provided tool will become the [activeTool](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#activeTool).**Possible Values:**Value | Description |----- | ----------- |transform | This is the *default* tool for graphics with a [polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) geometry, [polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) geometry or graphics that use a [3D object symbol layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html) with a [point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometry. It allows one or multiple graphics to be scaled, rotated and moved by default. Its default behavior can be changed by setting the `enableRotation`, `enableScaling` or `preserveAspectRatio` arguments when calling the `update` method or setting them on the [defaultUpdateOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultUpdateOptions) property when the Sketch widget initializes.reshape | This tool allows the entire graphic or individual vertices of the graphic to be moved. Vertices can be added or removed. This tool can only be used with a single graphic that has a [polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) or [polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) geometry.move | This is the *default* tool for graphics with a [point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometry that do not use a [3D object symbol layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html). It should be used for specific cases where you just want to move selected `polygon` and `polyline` graphics without additional options. Additionally, the `move` tool does not support toggling to different modes, since the `move` operation is built into both the `transform` and `reshape` tools by default.
     * @param updateOptions.enableRotation Indicates if the `rotation` operation will be enabled when updating graphics. Only applies if `tool` is `transform`.
     * @param updateOptions.enableScaling Indicates if the `scale` operation will be enabled when updating graphics. Only applies if `tool` is `transform`.
     * @param updateOptions.preserveAspectRatio Indicates if the uniform scale operation will be enabled when updating graphics. `enableScaling`must be set `true` when setting this property to `true`. Only applies if `tool` is `transform` and is always `true` when transforming points that use a [3D object symbol layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html).
     * @param updateOptions.toggleToolOnClick Indicates if the graphic being updated can be toggled between `transform` and `reshape` update options.
     *
     */
    update(graphics: Graphic | Graphic[], updateOptions?: SketchViewModelUpdateUpdateOptions): IPromise<void>;
  }

  interface SketchViewModelConstructor {
    new (properties?: SketchViewModelProperties): SketchViewModel;
  }

  export const SketchViewModel: SketchViewModelConstructor;

  interface SketchViewModelProperties {
    /**
     * Default update options set for the SketchViewModel. Update options set on this property will be overridden by options passed tothe [update()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#update) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultUpdateOptions)
     */
    defaultUpdateOptions?: SketchViewModelDefaultUpdateOptions;
    /**
     * The [GraphicsLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html) associated with the SketchViewModel. The SketchViewModel adds new [graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) to this layer or can only update graphicsstored in this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#layer)
     */
    layer?: GraphicsLayerProperties;
    /**
     * A simple marker symbol used for representing the point geometry that is being drawn.The default value is the following:```js{  type: "simple-marker",  style: "circle",  size: 6,  color: [255, 255, 255],  outline: {   color: [50, 50, 50],    width: 1  }}```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#pointSymbol)
     */
    pointSymbol?: SimpleMarkerSymbolProperties | PointSymbol3DProperties;
    /**
     * A simple fill symbol used for representing the polygon geometry that is being drawn.The default value is the following:```js{  type: "simple-fill",  color: [150, 150, 150, 0.2],  outline: {   color: [50, 50, 50],    width: 2  }}```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#polygonSymbol)
     */
    polygonSymbol?: SimpleFillSymbolProperties | PolygonSymbol3DProperties;
    /**
     * A simple line symbol used for representing the polyline geometry that is being drawn.The default value is the following:```js{  type: "simple-line",  color: [130, 130, 130],  width: 2}```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#polylineSymbol)
     */
    polylineSymbol?: SimpleLineSymbolProperties | LineSymbol3DProperties;
    /**
     * Indicates if a graphic can be selected to be updated. If `false`, graphics cannot selected to be updated. Set this property to `false`to add a custom [hitTest](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#hitTest) logic for [updating](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#update) graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#updateOnGraphicClick)
     */
    updateOnGraphicClick?: boolean;
    /**
     * The view in which geometries will be sketched by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
  }

  export interface SketchViewModelCreateCreateOptions extends Object {
    /**
     * Specifies how the graphic can be created. The create mode applies only when creating`polygon`, `polyline`, `rectangle` and `circle` geometries.**Possible Values:**Value | Description |----- | ----------- |hybrid | Vertices are added while the pointer is clicked or dragged. Applies to and is the default for `polygon` and `polyline`.freehand | Vertices are added while the pointer is dragged. Applies to `polygon`, `polyline` `rectangle` and `circle`. Default for `rectangle` and `circle`.click | Vertices are added when the pointer is clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#create)
     */
    mode?: string;
  }

  export interface SketchViewModelDefaultUpdateOptions extends Object {
    /**
     * Name of the update tool. The default tool is `transform` for graphics with polygon and polyline geometries and `move` for graphics with point and multipoint geometries.                            However, if a graphic with point geometry uses a [3D object symbol layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), the default tool is `transform`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultUpdateOptions)
     */
    tool?: string;
    /**
     * Indicates if the `rotation` operation will be enabled when updating graphics. Only applies if `tool` is `transform`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultUpdateOptions)
     *
     * @default true
     */
    enableRotation?: boolean;
    /**
     * Indicates if the `scale` operation will be enabled when updating graphics. Only applies if `tool` is `transform`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultUpdateOptions)
     *
     * @default true
     */
    enableScaling?: boolean;
    /**
     * Indicates whether more than one selection can be made at once. This pertains to shift+click interaction with the `transform` tool.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultUpdateOptions)
     *
     * @default true
     */
    multipleSelectionEnabled?: boolean;
    /**
     * Indicates if the uniform scale operation will be enabled when updating graphics. `enableScaling`must be set `true` when setting this property to `true`. Only applies if `tool` is `transform` and is always `true` when transforming points that use a [3D object symbol layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultUpdateOptions)
     *
     * @default false
     */
    preserveAspectRatio?: boolean;
    /**
     * Indicates if the graphic being updated can be toggled between `transform` and `reshape` update options.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultUpdateOptions)
     *
     * @default true
     */
    toggleToolOnClick?: boolean;
  }

  export interface SketchViewModelUpdateUpdateOptions extends Object {
    /**
     * Name of the update tool. Specifies the update operation for the selected graphics. The provided tool will become the [activeTool](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#activeTool).**Possible Values:**Value | Description |----- | ----------- |transform | This is the *default* tool for graphics with a [polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) geometry, [polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) geometry or graphics that use a [3D object symbol layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html) with a [point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometry. It allows one or multiple graphics to be scaled, rotated and moved by default. Its default behavior can be changed by setting the `enableRotation`, `enableScaling` or `preserveAspectRatio` arguments when calling the `update` method or setting them on the [defaultUpdateOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultUpdateOptions) property when the Sketch widget initializes.reshape | This tool allows the entire graphic or individual vertices of the graphic to be moved. Vertices can be added or removed. This tool can only be used with a single graphic that has a [polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) or [polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) geometry.move | This is the *default* tool for graphics with a [point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometry that do not use a [3D object symbol layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html). It should be used for specific cases where you just want to move selected `polygon` and `polyline` graphics without additional options. Additionally, the `move` tool does not support toggling to different modes, since the `move` operation is built into both the `transform` and `reshape` tools by default.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#update)
     */
    tool?: string;
    /**
     * Indicates if the `rotation` operation will be enabled when updating graphics. Only applies if `tool` is `transform`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#update)
     *
     * @default true
     */
    enableRotation?: boolean;
    /**
     * Indicates if the `scale` operation will be enabled when updating graphics. Only applies if `tool` is `transform`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#update)
     *
     * @default true
     */
    enableScaling?: boolean;
    /**
     * Indicates if the uniform scale operation will be enabled when updating graphics. `enableScaling`must be set `true` when setting this property to `true`. Only applies if `tool` is `transform` and is always `true` when transforming points that use a [3D object symbol layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#update)
     *
     * @default false
     */
    preserveAspectRatio?: boolean;
    /**
     * Indicates if the graphic being updated can be toggled between `transform` and `reshape` update options.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#update)
     *
     * @default true
     */
    toggleToolOnClick?: boolean;
  }

  /**
   * This information is returned as `toolEventInfo` parameter for the [create](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#event-create) event when the graphicis being created. It returns [VertexAddEventInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VertexAddEventInfo)when the user clicks the view or [CursorUpdateEventInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#CursorUpdateEventInfo) or when the user moves the cursor.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#CreateToolEventInfo)
   */
  export type CreateToolEventInfo = VertexAddEventInfo | CursorUpdateEventInfo;

  /**
   * This information is returned as `toolEventInfo` parameter for the [create](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#event-create)event when the user moves the cursor on the view while the graphic is being created.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#CursorUpdateEventInfo)
   */
  export interface CursorUpdateEventInfo extends Object {
    /**
     * Type is always `cursor-update`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#CursorUpdateEventInfo)
     */
    type: string;
    /**
     * An array of numbers representing the coordinates of the cursor location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#CursorUpdateEventInfo)
     */
    coordinates: number[];
  }

  /**
   * This information is returned as `toolEventInfo` parameter for the [update](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#event-update)event while the user is moving the graphics. It returns additional information associated with the move operationand what stage it is at.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#MoveEventInfo)
   */
  export interface MoveEventInfo extends Object {
    /**
     * Returns information indicating the stage of the move operation.**Possible Values:**Value | Description |----- | ----------- |move-start | The type changes to `move-start` at the start of `move` operation.move | The type changes to `move` while graphics are being moved.move-stop | The type changes to `move-stop` once graphics are moved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#MoveEventInfo)
     */
    type: string;
    /**
     * Number of pixels moved on the x-axis from the last known position.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#MoveEventInfo)
     */
    dx: number;
    /**
     * Number of pixels moved on the y-axis from the last known position.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#MoveEventInfo)
     */
    dy: number;
    /**
     * The instance of the graphic that is being moved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#MoveEventInfo)
     */
    mover: Graphic;
  }

  /**
   * This information is returned as `toolEventInfo` parameter for the [update](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#event-update)event while the user is reshaping the graphics. It returns additional information associated with the reshape operationand what stage it is at.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#ReshapeEventInfo)
   */
  export interface ReshapeEventInfo extends Object {
    /**
     * Returns information indicating the stage of the reshape operation.**Possible Values:**Value | Description |----- | ----------- |reshape-start | The type changes to `reshape-start` at the start of `reshape` operation.reshape | The type changes to `reshape` while graphics are being reshaped.reshape-stop | The type changes to `reshape-stop` once graphics are reshaped.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#ReshapeEventInfo)
     */
    type: string;
  }

  /**
   * This information is returned as `toolEventInfo` parameter for the [update](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#event-update)event while the user is rotating the graphics. It returns additional information associated with the rotate operationand what stage it is at.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#RotateEventInfo)
   */
  export interface RotateEventInfo extends Object {
    /**
     * Returns information indicating the stage of the rotate operation.**Possible Values:**Value | Description |----- | ----------- |rotate-start | The type changes to `rotate-start` at the start of `rotate` operation.rotate | The type changes to `rotate` while graphics are being rotated.rotate-stop | The type changes to `rotate-stop` once graphics are rotated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#RotateEventInfo)
     */
    type: string;
    /**
     * Angle of rotation in degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#RotateEventInfo)
     */
    angle: number;
  }

  /**
   * This information is returned as `toolEventInfo` parameter for the [update](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#event-update)event while the user is scaling or resizing the graphics. It returns additional information associated with the scaleoperation and what stage it is at.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#ScaleEventInfo)
   */
  export interface ScaleEventInfo extends Object {
    /**
     * Returns information indicating the stage of the scale operation.**Possible Values:**Value | Description |----- | ----------- |scale-start | The type changes to `scale-start` at the start of scale or resize operation.scale | The type changes to `scale` while graphics are being scaled or resized.scale-stop | The type changes to `scale-stop` once graphics are scaled or resized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#ScaleEventInfo)
     */
    type: string;
    /**
     * The x scale factor used to enlarge or shrink the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#ScaleEventInfo)
     */
    xScale: number;
    /**
     * The y scale factor used to enlarge or shrink the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#ScaleEventInfo)
     */
    yScale: number;
  }

  export interface SketchCreateCreateOptions extends Object {
    /**
     * Specifies how the graphic can be created. The create mode applies only when creating`polygon`, `polyline`, `rectangle` and `circle` geometries.**Possible Values:**Value | Description |----- | ----------- |hybrid | Vertices are added while the pointer is clicked or dragged. Applies to and is the default for `polygon` and `polyline`.freehand | Vertices are added while the pointer is dragged. Applies to `polygon`, `polyline` `rectangle` and `circle`. Default for `rectangle` and `circle`.click | Vertices are added when the pointer is clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#create)
     */
    mode?: string;
  }

  export interface SketchDefaultUpdateOptions extends Object {
    /**
     * Name of the update tool. The default tool is `transform` for graphics with polygon and polyline geometries and `move` for graphics with point and multipoint geometries.                            However, if a graphic with point geometry uses a [3D object symbol layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html), the default tool is `transform`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultUpdateOptions)
     */
    tool?: string;
    /**
     * Indicates if the `rotation` operation will be enabled when updating graphics. Only applies if `tool` is `transform`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultUpdateOptions)
     *
     * @default true
     */
    enableRotation?: boolean;
    /**
     * Indicates if the `scale` operation will be enabled when updating graphics. Only applies if `tool` is `transform`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultUpdateOptions)
     *
     * @default true
     */
    enableScaling?: boolean;
    /**
     * Indicates whether more than one selection can be made at once. This pertains to shift+click interaction with the `transform` tool.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultUpdateOptions)
     *
     * @default true
     */
    multipleSelectionEnabled?: boolean;
    /**
     * Indicates if the uniform scale operation will be enabled when updating graphics. `enableScaling`must be set `true` when setting this property to `true`. Only applies if `tool` is `transform` and is always `true` when transforming points that use a [3D object symbol layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultUpdateOptions)
     *
     * @default false
     */
    preserveAspectRatio?: boolean;
    /**
     * Indicates if the graphic being updated can be toggled between `transform` and `reshape` update options.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultUpdateOptions)
     *
     * @default true
     */
    toggleToolOnClick?: boolean;
  }

  export interface SketchUpdateUpdateOptions extends Object {
    /**
     * Name of the update tool. Specifies the update operation for the selected graphics. The provided tool will become the [activeTool](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#activeTool).**Possible Values:**Value | Description |----- | ----------- |transform | This is the *default* tool for graphics with a [polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) geometry, [polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) geometry or graphics that use a [3D object symbol layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html) with a [point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometry. It allows one or multiple graphics to be scaled, rotated and moved by default. Its default behavior can be changed by setting the `enableRotation`, `enableScaling` or `preserveAspectRatio` arguments when calling the `update` method or setting them on the [defaultUpdateOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultUpdateOptions) property when the Sketch widget initializes.reshape | This tool allows the entire graphic or individual vertices of the graphic to be moved. Vertices can be added or removed. This tool can only be used with a single graphic that has a [polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) or [polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) geometry.move | This is the *default* tool for graphics with a [point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometry that do not use a [3D object symbol layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html). It should be used for specific cases where you just want to move selected `polygon` and `polyline` graphics without additional options. Additionally, the `move` tool does not support toggling to different modes, since the `move` operation is built into both the `transform` and `reshape` tools by default.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#update)
     */
    tool?: string;
    /**
     * Indicates if the `rotation` operation will be enabled when updating graphics. Only applies if `tool` is `transform`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#update)
     *
     * @default true
     */
    enableRotation?: boolean;
    /**
     * Indicates if the `scale` operation will be enabled when updating graphics. Only applies if `tool` is `transform`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#update)
     *
     * @default true
     */
    enableScaling?: boolean;
    /**
     * Indicates if the uniform scale operation will be enabled when updating graphics. `enableScaling`must be set `true` when setting this property to `true`. Only applies if `tool` is `transform` and is always `true` when transforming points that use a [3D object symbol layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#update)
     *
     * @default false
     */
    preserveAspectRatio?: boolean;
    /**
     * Indicates if the graphic being updated can be toggled between `transform` and `reshape` update options.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#update)
     *
     * @default true
     */
    toggleToolOnClick?: boolean;
  }

  /**
   * This information is returned as `toolEventInfo` parameter for the [update](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#event-update) event when the user is updating graphics.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#UpdateToolEventInfo)
   */
  export type UpdateToolEventInfo =
    | MoveEventInfo
    | ReshapeEventInfo
    | RotateEventInfo
    | ScaleEventInfo
    | VertexAddEventInfo
    | VertexRemoveEventInfo;

  /**
   * This information is returned as `toolEventInfo` parameter for the [create](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#event-create)or [update](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#event-update) event when the user adds vertices to the graphic being created or updated.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VertexAddEventInfo)
   */
  export interface VertexAddEventInfo extends Object {
    /**
     * Type is always `vertex-add`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VertexAddEventInfo)
     */
    type: string;
    /**
     * An array of [graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) with [point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometriesrepresenting the vertices that were added.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VertexAddEventInfo)
     */
    added: Graphic[];
  }

  /**
   * This information is returned as `toolEventInfo` parameter for the [update](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#event-update) eventwhen the user is removing vertices from the graphic.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VertexRemoveEventInfo)
   */
  export interface VertexRemoveEventInfo extends Object {
    /**
     * Type is always `vertex-remove`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VertexRemoveEventInfo)
     */
    type: string;
    /**
     * An array of [graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) with [point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometriesrepresenting the vertices that were removed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VertexRemoveEventInfo)
     */
    removed: Graphic[];
  }

  interface Slice extends Widget {
    /**
     * A reference to the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice.html#view)
     */
    view: SceneView;
    /**
     * The view model for this widget. This is a class that contains the propertiesand methods that control this widget's behavior.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice.html#viewModel)
     */
    viewModel: SliceViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice.html#render)
     *
     *
     */
    render(): any;
  }

  interface SliceConstructor {
    new (properties?: SliceProperties): Slice;
  }

  export const Slice: SliceConstructor;

  interface SliceProperties extends WidgetProperties {
    /**
     * A reference to the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice.html#view)
     */
    view?: SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains the propertiesand methods that control this widget's behavior.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice.html#viewModel)
     */
    viewModel?: SliceViewModelProperties;
  }

  interface SliceViewModel extends Accessor {
    /**
     * Add layers to this collection to exclude them from the slice. Layers thatare draped on the ground surface are not affected by this propertyand can be excluded from the slice using [excludeGroundSurface](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SliceViewModel.html#excludeGroundSurface).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SliceViewModel.html#excludedLayers)
     */
    excludedLayers: Collection<Layer | BuildingComponentSublayer>;
    /**
     * Indicates whether the [Ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html) and layers thatare draped on the ground surface are excluded from the slice.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SliceViewModel.html#excludeGroundSurface)
     */
    excludeGroundSurface: boolean;
    /**
     * The view model's state.Value | Description------------|-------------disabled | not ready yetready | ready for slicingslicing | currently slicingsliced | finished slicing
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SliceViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;

    /**
     * Clears the current slice.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SliceViewModel.html#clearSlice)
     *
     *
     */
    clearSlice(): void;
    /**
     * Starts a new slice.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SliceViewModel.html#newSlice)
     *
     *
     */
    newSlice(): void;
  }

  interface SliceViewModelConstructor {
    new (properties?: SliceViewModelProperties): SliceViewModel;
  }

  export const SliceViewModel: SliceViewModelConstructor;

  interface SliceViewModelProperties {
    /**
     * Add layers to this collection to exclude them from the slice. Layers thatare draped on the ground surface are not affected by this propertyand can be excluded from the slice using [excludeGroundSurface](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SliceViewModel.html#excludeGroundSurface).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SliceViewModel.html#excludedLayers)
     */
    excludedLayers?: CollectionProperties<LayerProperties | BuildingComponentSublayerProperties>;
    /**
     * Indicates whether the [Ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html) and layers thatare draped on the ground surface are excluded from the slice.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SliceViewModel.html#excludeGroundSurface)
     */
    excludeGroundSurface?: boolean;
  }

  interface Slider extends Widget {
    /**
     * Indicates if the user can drag the segment between thumbsto update thumb positions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#draggableSegmentsEnabled)
     *
     * @default true
     */
    draggableSegmentsEnabled: boolean;
    /**
     * A function used to format labels. Overrides the default label formatter.By default labels are formatted in the following way:- When the data range is less than `10` (`(max - min) < 10`), labels  are rounded based on the value set in the [precision](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#precision) property.- When the data range is larger than `10`, [labels](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labels) display with a precision of  no more than two decimal places, though actual slider thumb values will maintain the  precision specified in [precision](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#precision).Use this property to override the behavior defined above.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelFormatFunction)
     */
    labelFormatFunction: SliderLabelFormatter;
    /**
     * Indicates whether to enable editing input values via keyboard inputwhen the user clicks a label. This allows the user to move the sliderthumb to precise values without sliding the thumbs.![Slider editable labels](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/sliders/slider-edit-label.png%20%22Slider%20with%20editable%20labels%22)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelInputsEnabled)
     *
     * @default false
     */
    labelInputsEnabled: boolean;
    /**
     * An array of strings associated with 'values' generated using an internal label formatter orthe values returned from [labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelFormatFunction).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labels)
     */
    readonly labels: string[];
    /**
     * Indicates whether to display labels alongside slider thumbs. By default, labelsdisplay input thumb values as floating point values with a precision of two digits.The format of labels can be customized via the [labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelFormatFunction).Alternatively, developers may also use CSS (e.g. `display: none`) to show/hide labels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelsVisible)
     *
     * @default false
     */
    labelsVisible: boolean;
    /**
     * Determines the layout/orientation of the Slider widget.**Possible Values:** vertical | horizontal
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#layout)
     *
     * @default horizontal
     */
    layout: string;
    /**
     * The maximum possible data/thumb value of the slider. In the constructor, if one of the valuesspecified in [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#values) is greater than the `max` value specifiedin this property, then the `max` will update to the highest value in `values`.To display the max value's label on the slider, then set [rangeLabelsVisible](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#rangeLabelsVisible) to `true`.To allow the end user to modify the max value, set[rangeLabelInputsEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#rangeLabelInputsEnabled) to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#max)
     */
    max: number;
    /**
     * The minimum possible data/thumb value of the slider. In the constructor, if one of the valuesspecified in [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#values) is less than the `min` value specifiedin this property, then the `min` will update to the lowest value in `values`.To display the min value's label on the slider, then set [rangeLabelsVisible](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#rangeLabelsVisible) to `true`.To allow the end user to modify the min value, set[rangeLabelInputsEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#rangeLabelInputsEnabled) to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#min)
     */
    min: number;
    /**
     * Defines how slider thumb values should be rounded. This number indicates the numberof decimal places slider thumb _values_ should round to when they have been moved.This value also indicates the precision of thumb [labels](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labels) when the data rangeis less than `10` (i.e. `(max - min) < 10`).When the data range is larger than `10`, [labels](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labels) display with a precision ofno more than two decimal places, though actual slider thumb values will maintain theprecision specified in this property.For example, given the default precision of `4`, and the following slider configuration,The labels of the thumbs will display two decimal places, but the precision of the actualthumb values will not be lost even when the user slides or moves the thumb.```jsconst slider = new Slider({  min: 20,  max: 100,  // data range of 80  values: [50.4331],  // thumb label will display 50.43  // thumb value will maintain precision, so  // value will remain at 50.4331  container: "sliderDiv"});```If the user manually enters a value that has a higher precision than what's indicated bythis property, the precision of that thumb value will be maintained until the thumbis moved by the user. At that point, the value will be rounded according to the indicated precision.If thumb labels aren't visible, they must be enabled with [labelInputsEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelInputsEnabled).Keep in mind this property rounds thumb [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#values) and shouldn't be used exclusivelyfor formatting purposes. To format thumb `labels`, use the [labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelFormatFunction)property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#precision)
     *
     * @default 4
     */
    precision: number;
    /**
     * Indicates whether to enable editing range values via keyboard inputwhen the user clicks a [min](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#min) or [max](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#max) label.This allows the user to increase or decrease the data range of the slider.![Slider editable range labels](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/sliders/slider-edit-range-label.png%20%22Slider%20with%20editable%20range%20labels%22)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#rangeLabelInputsEnabled)
     *
     * @default false
     */
    rangeLabelInputsEnabled: boolean;
    /**
     * Indicates whether to display [min](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#min) or [max](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#max) range values on the slider.The format of labels can be customized via the [labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelFormatFunction).Alternatively, developers may also use CSS (e.g. `display: none`) to show/hide labels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#rangeLabelsVisible)
     *
     * @default false
     */
    rangeLabelsVisible: boolean;
    /**
     * Indicates if the closest thumb will snap to the clicked location on the track.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#snapOnClickEnabled)
     *
     * @default true
     */
    snapOnClickEnabled: boolean;
    /**
     * The current state of the widget.**Possible Values:** ready | disabled | editing | dragging
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#state)
     */
    readonly state: string;
    /**
     * Sets steps, or intervals, on the slider that restrict userinput to specific values. If an array of numbers is passed to thisproperty, the slider thumbs may only be moved to the positionsspecified in the array.If a single number is set, then steps are set along the entireslider range at an interval of the provided value. In this scenario,the user may only slide the thumbs to values at the provided interval.For example, if a value of `0.5` is set here, and the slider[min](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#min) is `0` and the slider [max](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#max) is `10`, then the user willonly be able to update the thumbs to values of 0, 0.5, 1.0, 1.5, 2.0, etc.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#steps)
     */
    steps: number | number[];
    /**
     * Function that executes each time a thumb is created on the slider. This canbe used to add custom styling to each thumb or hook event listeners tospecific thumbs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#thumbCreatedFunction)
     */
    thumbCreatedFunction: ThumbCreatedFunction;
    /**
     * When set, renders ticks along the slider track. See the [TickConfig](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#TickConfig) documentationfor more information on how to configure tick placement, style, and behavior.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#tickConfigs)
     */
    tickConfigs: TickConfig[];
    /**
     * The HTML Element node representing the slider track. Use this property to attach event listeners tothe track or to customize the track's CSS.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#trackElement)
     */
    trackElement: HTMLElement;
    /**
     * An array of numbers representing absolute thumb positions on the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#values)
     */
    values: number[];
    /**
     * The view model for the Slider widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[SliderViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html)class to access all properties and methods on the Slider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#viewModel)
     */
    viewModel: SliderViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#render)
     *
     *
     */
    render(): any;
  }

  interface SliderConstructor {
    new (properties?: SliderProperties): Slider;
  }

  export const Slider: SliderConstructor;

  interface SliderProperties extends WidgetProperties {
    /**
     * Indicates if the user can drag the segment between thumbsto update thumb positions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#draggableSegmentsEnabled)
     *
     * @default true
     */
    draggableSegmentsEnabled?: boolean;
    /**
     * A function used to format labels. Overrides the default label formatter.By default labels are formatted in the following way:- When the data range is less than `10` (`(max - min) < 10`), labels  are rounded based on the value set in the [precision](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#precision) property.- When the data range is larger than `10`, [labels](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labels) display with a precision of  no more than two decimal places, though actual slider thumb values will maintain the  precision specified in [precision](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#precision).Use this property to override the behavior defined above.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelFormatFunction)
     */
    labelFormatFunction?: SliderLabelFormatter;
    /**
     * Indicates whether to enable editing input values via keyboard inputwhen the user clicks a label. This allows the user to move the sliderthumb to precise values without sliding the thumbs.![Slider editable labels](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/sliders/slider-edit-label.png%20%22Slider%20with%20editable%20labels%22)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelInputsEnabled)
     *
     * @default false
     */
    labelInputsEnabled?: boolean;
    /**
     * Indicates whether to display labels alongside slider thumbs. By default, labelsdisplay input thumb values as floating point values with a precision of two digits.The format of labels can be customized via the [labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelFormatFunction).Alternatively, developers may also use CSS (e.g. `display: none`) to show/hide labels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelsVisible)
     *
     * @default false
     */
    labelsVisible?: boolean;
    /**
     * Determines the layout/orientation of the Slider widget.**Possible Values:** vertical | horizontal
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#layout)
     *
     * @default horizontal
     */
    layout?: string;
    /**
     * The maximum possible data/thumb value of the slider. In the constructor, if one of the valuesspecified in [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#values) is greater than the `max` value specifiedin this property, then the `max` will update to the highest value in `values`.To display the max value's label on the slider, then set [rangeLabelsVisible](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#rangeLabelsVisible) to `true`.To allow the end user to modify the max value, set[rangeLabelInputsEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#rangeLabelInputsEnabled) to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#max)
     */
    max?: number;
    /**
     * The minimum possible data/thumb value of the slider. In the constructor, if one of the valuesspecified in [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#values) is less than the `min` value specifiedin this property, then the `min` will update to the lowest value in `values`.To display the min value's label on the slider, then set [rangeLabelsVisible](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#rangeLabelsVisible) to `true`.To allow the end user to modify the min value, set[rangeLabelInputsEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#rangeLabelInputsEnabled) to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#min)
     */
    min?: number;
    /**
     * Defines how slider thumb values should be rounded. This number indicates the numberof decimal places slider thumb _values_ should round to when they have been moved.This value also indicates the precision of thumb [labels](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labels) when the data rangeis less than `10` (i.e. `(max - min) < 10`).When the data range is larger than `10`, [labels](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labels) display with a precision ofno more than two decimal places, though actual slider thumb values will maintain theprecision specified in this property.For example, given the default precision of `4`, and the following slider configuration,The labels of the thumbs will display two decimal places, but the precision of the actualthumb values will not be lost even when the user slides or moves the thumb.```jsconst slider = new Slider({  min: 20,  max: 100,  // data range of 80  values: [50.4331],  // thumb label will display 50.43  // thumb value will maintain precision, so  // value will remain at 50.4331  container: "sliderDiv"});```If the user manually enters a value that has a higher precision than what's indicated bythis property, the precision of that thumb value will be maintained until the thumbis moved by the user. At that point, the value will be rounded according to the indicated precision.If thumb labels aren't visible, they must be enabled with [labelInputsEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelInputsEnabled).Keep in mind this property rounds thumb [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#values) and shouldn't be used exclusivelyfor formatting purposes. To format thumb `labels`, use the [labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelFormatFunction)property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#precision)
     *
     * @default 4
     */
    precision?: number;
    /**
     * Indicates whether to enable editing range values via keyboard inputwhen the user clicks a [min](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#min) or [max](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#max) label.This allows the user to increase or decrease the data range of the slider.![Slider editable range labels](https://developers.arcgis.com/javascript/assets/img/apiref/widgets/sliders/slider-edit-range-label.png%20%22Slider%20with%20editable%20range%20labels%22)
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#rangeLabelInputsEnabled)
     *
     * @default false
     */
    rangeLabelInputsEnabled?: boolean;
    /**
     * Indicates whether to display [min](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#min) or [max](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#max) range values on the slider.The format of labels can be customized via the [labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelFormatFunction).Alternatively, developers may also use CSS (e.g. `display: none`) to show/hide labels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#rangeLabelsVisible)
     *
     * @default false
     */
    rangeLabelsVisible?: boolean;
    /**
     * Indicates if the closest thumb will snap to the clicked location on the track.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#snapOnClickEnabled)
     *
     * @default true
     */
    snapOnClickEnabled?: boolean;
    /**
     * Sets steps, or intervals, on the slider that restrict userinput to specific values. If an array of numbers is passed to thisproperty, the slider thumbs may only be moved to the positionsspecified in the array.If a single number is set, then steps are set along the entireslider range at an interval of the provided value. In this scenario,the user may only slide the thumbs to values at the provided interval.For example, if a value of `0.5` is set here, and the slider[min](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#min) is `0` and the slider [max](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#max) is `10`, then the user willonly be able to update the thumbs to values of 0, 0.5, 1.0, 1.5, 2.0, etc.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#steps)
     */
    steps?: number | number[];
    /**
     * Function that executes each time a thumb is created on the slider. This canbe used to add custom styling to each thumb or hook event listeners tospecific thumbs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#thumbCreatedFunction)
     */
    thumbCreatedFunction?: ThumbCreatedFunction;
    /**
     * When set, renders ticks along the slider track. See the [TickConfig](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#TickConfig) documentationfor more information on how to configure tick placement, style, and behavior.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#tickConfigs)
     */
    tickConfigs?: TickConfig[];
    /**
     * The HTML Element node representing the slider track. Use this property to attach event listeners tothe track or to customize the track's CSS.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#trackElement)
     */
    trackElement?: HTMLElement;
    /**
     * An array of numbers representing absolute thumb positions on the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#values)
     */
    values?: number[];
    /**
     * The view model for the Slider widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[SliderViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html)class to access all properties and methods on the Slider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#viewModel)
     */
    viewModel?: SliderViewModelProperties;
  }

  interface SliderViewModel extends Accessor, Evented {
    /**
     * A function used to format labels. Overrides the default label formatter.By default labels are formatted in the following way:- When the data range is less than `10` (`(max - min) < 10`), labels  are rounded based on the value set in the [precision](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#precision) property.- When the data range is larger than `10`, [labels](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labels) display with a precision of  no more than two decimal places, though actual slider thumb values will maintain the  precision specified in [precision](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#precision).Use this property to override the behavior defined above.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labelFormatFunction)
     */
    labelFormatFunction: SliderLabelFormatter;
    /**
     * An array of strings associated with [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#values) generated using an internal label formatter orthe values returned from [labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labelFormatFunction).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labels)
     */
    readonly labels: string[];
    /**
     * The maximum possible data/thumb value of the slider. In the constructor, if one of the valuesspecified in [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#values) is greater than the `max` value specifiedin this property, then the `max` will update to the highest value in `values`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#max)
     */
    max: number;
    /**
     * The minimum possible data/thumb value of the slider. In the constructor, if one of the valuesspecified in [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#values) is less than the `min` value specifiedin this property, then the `min` will update to the lowest value in `values`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#min)
     */
    min: number;
    /**
     * Defines how slider values should be rounded. This number indicates the numberof decimal places slider values should round to when they have been moved.This value also indicates the precision of thumb [labels](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labels) when the data range([max](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#max) - [min](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#min)) is less than `10`.When the data range is larger than `10`, [labels](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labels) display with a precision ofno more than two decimal places, though actual slider thumb values will maintain theprecision specified in this property.For example, given the default precision of `4`, and the following slider configuration,The label of the thumb will display two decimal places, but the precision of the actualthumb value will not be lost even when the user slides or moves the thumb.```jsconst slider = new SliderVM({  min: 20,  max: 100,  // data range of 80  values: [50.4331],  // thumb label will display 50.43  // thumb value will maintain precision, so  // value will remain at 50.4331});```If the user manually enters a value that has a higher precision than what's indicated bythis property, the precision of that thumb value will be maintained until the thumbis moved by the user. At that point, the value will be rounded according to the indicated precision.If thumb labels aren't visible, they must be enabled with [labelInputsEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labelInputsEnabled).Keep in mind this property rounds thumb [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#values) and shouldn't be used exclusivelyfor formatting purposes. To format thumb `labels`, use the [labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labelFormatFunction)property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#precision)
     *
     * @default 4
     */
    precision: number;
    /**
     * The state of the view model.**Possible Values:** ready | disabled
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#state)
     */
    readonly state: string;
    /**
     * An array of numbers representing absolute thumb positions on the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#values)
     */
    values: number[];

    /**
     * The default label format function, available for use as a fallback in custom formatting implementations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#defaultLabelFormatFunction)
     *
     * @param value The thumb value to format.
     *
     */
    defaultLabelFormatFunction(value: number): string;
    /**
     * Returns the formatted label for a provided value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#getLabelForValue)
     *
     * @param value The value from which to retrieve a formatted label.
     * @param type The label type.**Possible Values:** min | max | tick | values
     * @param index The index of the label.
     *
     */
    getLabelForValue(value: number, type?: string, index?: number): string;
    /**
     * Updates a thumb [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#values) based on the provided index. The provided valuemust differ from the previous value.The provided value must also be between the [min](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#min) and [max](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#max).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#setValue)
     *
     * @param index The index of the thumb value in the associated [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#values) array.
     * @param value The new value to replace with the old value.
     *
     */
    setValue(index: number, value: number): void;
  }

  interface SliderViewModelConstructor {
    new (properties?: SliderViewModelProperties): SliderViewModel;
  }

  export const SliderViewModel: SliderViewModelConstructor;

  interface SliderViewModelProperties {
    /**
     * A function used to format labels. Overrides the default label formatter.By default labels are formatted in the following way:- When the data range is less than `10` (`(max - min) < 10`), labels  are rounded based on the value set in the [precision](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#precision) property.- When the data range is larger than `10`, [labels](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labels) display with a precision of  no more than two decimal places, though actual slider thumb values will maintain the  precision specified in [precision](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#precision).Use this property to override the behavior defined above.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labelFormatFunction)
     */
    labelFormatFunction?: SliderLabelFormatter;
    /**
     * The maximum possible data/thumb value of the slider. In the constructor, if one of the valuesspecified in [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#values) is greater than the `max` value specifiedin this property, then the `max` will update to the highest value in `values`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#max)
     */
    max?: number;
    /**
     * The minimum possible data/thumb value of the slider. In the constructor, if one of the valuesspecified in [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#values) is less than the `min` value specifiedin this property, then the `min` will update to the lowest value in `values`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#min)
     */
    min?: number;
    /**
     * Defines how slider values should be rounded. This number indicates the numberof decimal places slider values should round to when they have been moved.This value also indicates the precision of thumb [labels](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labels) when the data range([max](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#max) - [min](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#min)) is less than `10`.When the data range is larger than `10`, [labels](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labels) display with a precision ofno more than two decimal places, though actual slider thumb values will maintain theprecision specified in this property.For example, given the default precision of `4`, and the following slider configuration,The label of the thumb will display two decimal places, but the precision of the actualthumb value will not be lost even when the user slides or moves the thumb.```jsconst slider = new SliderVM({  min: 20,  max: 100,  // data range of 80  values: [50.4331],  // thumb label will display 50.43  // thumb value will maintain precision, so  // value will remain at 50.4331});```If the user manually enters a value that has a higher precision than what's indicated bythis property, the precision of that thumb value will be maintained until the thumbis moved by the user. At that point, the value will be rounded according to the indicated precision.If thumb labels aren't visible, they must be enabled with [labelInputsEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labelInputsEnabled).Keep in mind this property rounds thumb [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#values) and shouldn't be used exclusivelyfor formatting purposes. To format thumb `labels`, use the [labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labelFormatFunction)property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#precision)
     *
     * @default 4
     */
    precision?: number;
    /**
     * An array of numbers representing absolute thumb positions on the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#values)
     */
    values?: number[];
  }

  export type SliderLabelFormatter = (value: number, type?: string, index?: number) => string;

  export type ThumbCreatedFunction = (
    index: number,
    value: number,
    thumbElement: HTMLElement,
    labelElement?: HTMLElement
  ) => void;

  /**
   * Object specification for configuring ticks on the slider. An array of these objects should be set on the[tickConfigs](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#tickConfigs) property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#TickConfig)
   */
  export interface TickConfig extends Object {
    /**
     * The mode or method of positioning ticks along the slider track. See the table below for a list of possible values.Possible Value | Description---------------|------------count | Places a fixed number of ticks (provided in the `values` property) at equal distances from each other below the slider track.percent | When set, and a single number is set on the `values` property, ticks will be placed at the specified percentage interval along the length of the slider. For example, when `mode` is percent and `values` is `5`, then 20 ticks will be placed below the slider track (at 5-percent intervals from each other). If an array of `values` is provided, the values are interpreted as percentages along the slider. So if `values` is `[10, 50, 90]`, then three ticks will be placed below the track; one at the midway point, and two 10 percent of the length from either end of the slider.position | Indicates that ticks will only be placed at the values specified in the `values` property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#TickConfig)
     */
    mode: string;
    /**
     * Indicates where ticks will be rendered below the track. See the description for `mode` for more information about how this property is interpreted by each mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#TickConfig)
     */
    values: number | number[];
    /**
     * Indicates whether to render labels for the ticks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#TickConfig)
     */
    labelsVisible?: boolean;
    /**
     * Callback that fires for each tick. You can override default behaviors and styles with this property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#TickConfig)
     */
    tickCreatedFunction?: TickCreatedFunction;
    /**
     * Callback for formatting tick labels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#TickConfig)
     */
    labelFormatFunction?: SliderLabelFormatter;
  }

  export type TickCreatedFunction = (value: number, tickElement: HTMLElement, labelElement?: HTMLElement) => void;

  interface ClassedColorSlider extends SmartMappingSliderBase {
    /**
     * An array of class breaks with associated colors. The colors mapped to each break canbe used to update the renderer of a layer. A minimum of two breaks must be provided to the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider.html#breaks)
     */
    breaks: ClassedColorSliderBreaks[];
    /**
     * The view model for the ClassedColorSlider widget. This class contains all the logic(properties and methods) that controls this widget's behavior. See the[ClassedColorSliderViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider-ClassedColorSliderViewModel.html)class to access all properties and methods on the ClassedColorSlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider.html#viewModel)
     */
    viewModel: ClassedColorSliderViewModel;

    /**
     * A convenience function used to update the[classBreakInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#classBreakInfos)of a [ClassBreaksRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html) associated with this slider.The number of breaks from the renderer must match the number of breaks in the slider.Generally, the input breaks for this method should come from the same renderer as oneused to create the slider with the [fromRendererResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider.html#fromRendererResult) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider.html#updateClassBreakInfos)
     *
     * @param breakInfos The classBreakInfos  from a [ClassBreaksRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html) instance to update based on  the properties of the slider.
     *
     */
    updateClassBreakInfos(breakInfos: ClassBreakInfo[]): ClassBreakInfo[];
    /**
     * A convenience function used to update the properties a ClassedColorSlider from the resultof the [createClassBreaksRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider.html#updateFromRendererResult)
     *
     * @param rendererResult The result object from the [createClassBreaksRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)  method.
     * @param histogramResult The result histogram object from the [histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)  method.
     *
     */
    updateFromRendererResult(rendererResult: ClassBreaksRendererResult, histogramResult?: HistogramResult): void;

    on(name: "max-change", eventHandler: ClassedColorSliderMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: ClassedColorSliderMinChangeEventHandler): IHandle;

    on(name: "thumb-change", eventHandler: ClassedColorSliderThumbChangeEventHandler): IHandle;

    on(name: "thumb-drag", eventHandler: ClassedColorSliderThumbDragEventHandler): IHandle;
  }

  interface ClassedColorSliderConstructor {
    new (properties?: ClassedColorSliderProperties): ClassedColorSlider;

    /**
     * A convenience function used to create a ClassedColorSlider widget from the resultof the [createClassBreaksRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider.html#fromRendererResult)
     *
     * @param rendererResult The result object from the [createClassBreaksRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createClassBreaksRenderer)  method.
     * @param histogramResult The result histogram object from the [histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)  method.
     *
     */
    fromRendererResult(
      rendererResult: ClassBreaksRendererResult,
      histogramResult?: HistogramResult
    ): ClassedColorSlider;
  }

  export const ClassedColorSlider: ClassedColorSliderConstructor;

  interface ClassedColorSliderProperties extends SmartMappingSliderBaseProperties {
    /**
     * An array of class breaks with associated colors. The colors mapped to each break canbe used to update the renderer of a layer. A minimum of two breaks must be provided to the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider.html#breaks)
     */
    breaks?: ClassedColorSliderBreaks[];
    /**
     * The view model for the ClassedColorSlider widget. This class contains all the logic(properties and methods) that controls this widget's behavior. See the[ClassedColorSliderViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider-ClassedColorSliderViewModel.html)class to access all properties and methods on the ClassedColorSlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider.html#viewModel)
     */
    viewModel?: ClassedColorSliderViewModelProperties;
  }

  interface ClassedColorSliderViewModel extends SliderViewModel {
    /**
     * An array of class breaks with associated colors. The colors mapped to each break canbe used to update the renderer of a layer. A minimum of two breaks must be provided to the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider-ClassedColorSliderViewModel.html#breaks)
     */
    breaks: ClassedColorSliderViewModelBreaks[];
    /**
     * A modified version of[SliderViewModel.labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labelFormatFunction),which is a custom function used to format labels. Overrides the default label formatter.This function also supports date formatting.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider-ClassedColorSliderViewModel.html#labelFormatFunction)
     */
    labelFormatFunction: SmartMappingSliderBaseLabelFormatter;

    /**
     * Generates the color ramp rendered on the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider-ClassedColorSliderViewModel.html#getStopInfo)
     *
     *
     */
    getStopInfo(): StopInfo[];

    on(name: "max-change", eventHandler: ClassedColorSliderViewModelMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: ClassedColorSliderViewModelMinChangeEventHandler): IHandle;

    on(name: "value-change", eventHandler: ClassedColorSliderViewModelValueChangeEventHandler): IHandle;
  }

  interface ClassedColorSliderViewModelConstructor {
    new (properties?: ClassedColorSliderViewModelProperties): ClassedColorSliderViewModel;
  }

  export const ClassedColorSliderViewModel: ClassedColorSliderViewModelConstructor;

  interface ClassedColorSliderViewModelProperties extends SliderViewModelProperties {
    /**
     * An array of class breaks with associated colors. The colors mapped to each break canbe used to update the renderer of a layer. A minimum of two breaks must be provided to the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider-ClassedColorSliderViewModel.html#breaks)
     */
    breaks?: ClassedColorSliderViewModelBreaks[];
    /**
     * A modified version of[SliderViewModel.labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labelFormatFunction),which is a custom function used to format labels. Overrides the default label formatter.This function also supports date formatting.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider-ClassedColorSliderViewModel.html#labelFormatFunction)
     */
    labelFormatFunction?: SmartMappingSliderBaseLabelFormatter;
  }

  export interface ClassedColorSliderViewModelBreaks extends Object {
    /**
     * Features with values within the provided `min`  and `max` will be rendered with this color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider-ClassedColorSliderViewModel.html#breaks)
     */
    color: Color;
    /**
     * The max value of the break. The `max` of each break should match the `min`  value of the break directly above it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider-ClassedColorSliderViewModel.html#breaks)
     */
    max: number;
    /**
     * The min value of the break. The `min` of each break should match the `max`  value of the break directly below it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider-ClassedColorSliderViewModel.html#breaks)
     */
    min: number;
  }

  export interface ClassedColorSliderViewModelMaxChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface ClassedColorSliderViewModelMinChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  /**
   * The return object of the [getStopInfo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider-ClassedColorSliderViewModel.html#getStopInfo) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider-ClassedColorSliderViewModel.html#StopInfo)
   */
  export interface StopInfo extends Object {
    /**
     * The color of the break.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider-ClassedColorSliderViewModel.html#StopInfo)
     */
    color: Color;
    /**
     * The offset of the stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider-ClassedColorSliderViewModel.html#StopInfo)
     */
    offset: number;
  }

  export interface ClassedColorSliderViewModelValueChangeEvent {
    index: number;

    oldValue: number;

    type: string;

    value: number;
  }

  export interface ClassedColorSliderBreaks extends Object {
    /**
     * Features with values within the provided `min`  and `max` will be rendered with this color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider.html#breaks)
     */
    color: Color;
    /**
     * The max value of the break. The `max` of each break should match the `min`  value of the break directly above it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider.html#breaks)
     */
    max: number;
    /**
     * The min value of the break. The `min` of each break should match the `max`  value of the break directly below it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider.html#breaks)
     */
    min: number;
  }

  export interface ClassedColorSliderMaxChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface ClassedColorSliderMinChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface ClassedColorSliderThumbChangeEvent {
    index: number;

    oldValue: number;

    type: string;

    value: number;
  }

  export interface ClassedColorSliderThumbDragEvent {
    index: number;

    state: string;

    type: string;

    value: number;
  }

  interface ClassedSizeSlider extends SmartMappingSliderBase {
    /**
     * An array of class breaks with associated sizes. The size mapped to each break shouldbe used to update the renderer of a layer. A minimum of two breaks must be provided to the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#breaks)
     */
    breaks: ClassedSizeSliderBreaks[];
    /**
     * The view model for the ClassedSizeSlider widget. This class contains all the logic(properties and methods) that controls this widget's behavior. See the[ClassedSizeSliderViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider-ClassedSizeSliderViewModel.html)class to access all properties and methods on the ClassedSizeSlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#viewModel)
     */
    viewModel: ClassedSizeSliderViewModel;

    /**
     * A convenience function used to update the[classBreakInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#classBreakInfos)of a [ClassBreaksRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html) associated with this slider.The number of breaks from the renderer must match the number of breaks in the slider.Generally, the input breaks for this method should come from the same renderer as oneused to create the slider with the [fromRendererResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#fromRendererResult) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#updateClassBreakInfos)
     *
     * @param breakInfos The classBreakInfos  from a [ClassBreaksRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html) instance to update based on  the properties of the slider.
     *
     */
    updateClassBreakInfos(breakInfos: ClassBreakInfo[]): ClassBreakInfo[];
    /**
     * A convenience function used to update the properties a ClassedSizeSlider from the resultof the [createClassBreaksRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#updateClassBreakInfos)
     *
     * @param rendererResult The result object from the [createClassBreaksRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)  method.
     * @param histogramResult The result histogram object from the [histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)  method.
     *
     */
    updateClassBreakInfos(rendererResult: sizeClassBreaksRendererResult, histogramResult?: HistogramResult): void;

    on(name: "max-change", eventHandler: ClassedSizeSliderMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: ClassedSizeSliderMinChangeEventHandler): IHandle;

    on(name: "thumb-change", eventHandler: ClassedSizeSliderThumbChangeEventHandler): IHandle;

    on(name: "thumb-drag", eventHandler: ClassedSizeSliderThumbDragEventHandler): IHandle;
  }

  interface ClassedSizeSliderConstructor {
    new (properties?: ClassedSizeSliderProperties): ClassedSizeSlider;

    /**
     * A convenience function used to create a ClassedSizeSlider widget from the resultof the [createClassBreaksRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#fromRendererResult)
     *
     * @param rendererResult The result object from the [createClassBreaksRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createClassBreaksRenderer)  method.
     * @param histogramResult The result histogram object from the [histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)  method.
     *
     */
    fromRendererResult(
      rendererResult: sizeClassBreaksRendererResult,
      histogramResult?: HistogramResult
    ): ClassedSizeSlider;
  }

  export const ClassedSizeSlider: ClassedSizeSliderConstructor;

  interface ClassedSizeSliderProperties extends SmartMappingSliderBaseProperties {
    /**
     * An array of class breaks with associated sizes. The size mapped to each break shouldbe used to update the renderer of a layer. A minimum of two breaks must be provided to the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#breaks)
     */
    breaks?: ClassedSizeSliderBreaks[];
    /**
     * The view model for the ClassedSizeSlider widget. This class contains all the logic(properties and methods) that controls this widget's behavior. See the[ClassedSizeSliderViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider-ClassedSizeSliderViewModel.html)class to access all properties and methods on the ClassedSizeSlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#viewModel)
     */
    viewModel?: ClassedSizeSliderViewModelProperties;
  }

  interface ClassedSizeSliderViewModel extends SliderViewModel {
    /**
     * An array of class breaks with associated sizes. The size mapped to each break canbe used to update the renderer of a layer. A minimum of two breaks must be provided to the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider-ClassedSizeSliderViewModel.html#breaks)
     */
    breaks: ClassedSizeSliderViewModelBreaks[];
    /**
     * A modified version of[SliderViewModel.labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labelFormatFunction),which is a custom function used to format labels. Overrides the default label formatter.This function also supports date formatting.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider-ClassedSizeSliderViewModel.html#labelFormatFunction)
     */
    labelFormatFunction: SmartMappingSliderBaseLabelFormatter;

    on(name: "max-change", eventHandler: ClassedSizeSliderViewModelMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: ClassedSizeSliderViewModelMinChangeEventHandler): IHandle;

    on(name: "value-change", eventHandler: ClassedSizeSliderViewModelValueChangeEventHandler): IHandle;
  }

  interface ClassedSizeSliderViewModelConstructor {
    new (properties?: ClassedSizeSliderViewModelProperties): ClassedSizeSliderViewModel;
  }

  export const ClassedSizeSliderViewModel: ClassedSizeSliderViewModelConstructor;

  interface ClassedSizeSliderViewModelProperties extends SliderViewModelProperties {
    /**
     * An array of class breaks with associated sizes. The size mapped to each break canbe used to update the renderer of a layer. A minimum of two breaks must be provided to the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider-ClassedSizeSliderViewModel.html#breaks)
     */
    breaks?: ClassedSizeSliderViewModelBreaks[];
    /**
     * A modified version of[SliderViewModel.labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labelFormatFunction),which is a custom function used to format labels. Overrides the default label formatter.This function also supports date formatting.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider-ClassedSizeSliderViewModel.html#labelFormatFunction)
     */
    labelFormatFunction?: SmartMappingSliderBaseLabelFormatter;
  }

  export interface ClassedSizeSliderViewModelBreaks extends Object {
    /**
     * The size in points of the symbol representing features with values within  the given `min` and `max`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider-ClassedSizeSliderViewModel.html#breaks)
     */
    size: number;
    /**
     * The max value of the break. The `max` of each break should match the `min`  value of the break directly above it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider-ClassedSizeSliderViewModel.html#breaks)
     */
    max: number;
    /**
     * The min value of the break. The `min` of each break should match the `max`  value of the break directly below it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider-ClassedSizeSliderViewModel.html#breaks)
     */
    min: number;
  }

  export interface ClassedSizeSliderViewModelMaxChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface ClassedSizeSliderViewModelMinChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface ClassedSizeSliderViewModelValueChangeEvent {
    index: number;

    oldValue: number;

    type: string;

    value: number;
  }

  export interface ClassedSizeSliderBreaks extends Object {
    /**
     * The size in points of the symbol representing features with values within  the given `min` and `max`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#breaks)
     */
    size: number;
    /**
     * The max value of the break. The `max` of each break should match the `min`  value of the break directly above it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#breaks)
     */
    max: number;
    /**
     * The min value of the break. The `min` of each break should match the `max`  value of the break directly below it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#breaks)
     */
    min: number;
  }

  export interface ClassedSizeSliderMaxChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface ClassedSizeSliderMinChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface ClassedSizeSliderThumbChangeEvent {
    index: number;

    oldValue: number;

    type: string;

    value: number;
  }

  export interface ClassedSizeSliderThumbDragEvent {
    index: number;

    state: string;

    type: string;

    value: number;
  }

  interface ColorSizeSlider extends SmartMappingSliderBase {
    /**
     * The colors and sizes corresponding with data values in the[ColorVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html) and[SizeVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html) of the rendererassociated with the slider.Use the [fromRendererResult()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#fromRendererResult)method to conveniently construct these stops from a renderer generated fromthe [univariateColorSize](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)smart mapping module.Use [updateVisualVariables()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#updateVisualVariables) to update the renderer'svisual variables with the values matching the slider thumb positions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#stops)
     */
    stops: ColorSizeStop[];
    /**
     * The view model for the ColorSizeSlider widget. This class contains all the logic(properties and methods) that controls this widget's behavior. See the[ColorSizeSliderViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider-ColorSizeSliderViewModel.html)class to access all properties and methods on the ColorSizeSlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#viewModel)
     */
    viewModel: ColorSizeSliderViewModel;

    /**
     * A convenience function used to update the properties of a ColorSizeSlider widget instance from the[result](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#ContinuousRendererResult) ofthe [univariateColorSize.createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#updateFromRendererResult)
     *
     * @param rendererResult The result object from the [createContinuousRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)  method.
     * @param histogramResult The result histogram object from the [histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)  method.
     *
     */
    updateFromRendererResult(
      rendererResult: univariateColorSizeContinuousRendererResult,
      histogramResult?: HistogramResult
    ): void;
    /**
     * A convenience function used to update the visual variables of a renderer generated with the[univariateColorSize.createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)method with the values obtained from the slider. This method is useful for cases when the app allows the end user to switch data variablesused to render the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#updateVisualVariables)
     *
     * @param variables The visual variables to update from the renderer associated with the slider. The properties of the  color and size variables will update based on the slider thumb values.
     *
     */
    updateVisualVariables(variables: (ColorVariable | SizeVariable)[]): (ColorVariable | SizeVariable)[];

    on(name: "max-change", eventHandler: ColorSizeSliderMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: ColorSizeSliderMinChangeEventHandler): IHandle;

    on(name: "thumb-change", eventHandler: ColorSizeSliderThumbChangeEventHandler): IHandle;

    on(name: "thumb-drag", eventHandler: ColorSizeSliderThumbDragEventHandler): IHandle;
  }

  interface ColorSizeSliderConstructor {
    new (properties?: ColorSizeSliderProperties): ColorSizeSlider;

    /**
     * A convenience function used to create a ColorSizeSlider widget instance from the[result](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#ContinuousRendererResult) ofthe [univariateColorSize.createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)method.This method sets the slider [stops](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#stops), [min](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#maxm), [max](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#maxDataValue),and [histogramConfig](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#histogramConfig). It is still the developer's responsibility to assign it a proper[container](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#container) and any other optional properties.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#fromRendererResult)
     *
     * @param rendererResult The result object from the [createContinuousRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)  method.
     * @param histogramResult The result histogram object from the [histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)  method.
     *
     */
    fromRendererResult(
      rendererResult: univariateColorSizeContinuousRendererResult,
      histogramResult?: HistogramResult
    ): ColorSizeSlider;
  }

  export const ColorSizeSlider: ColorSizeSliderConstructor;

  interface ColorSizeSliderProperties extends SmartMappingSliderBaseProperties {
    /**
     * The colors and sizes corresponding with data values in the[ColorVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html) and[SizeVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html) of the rendererassociated with the slider.Use the [fromRendererResult()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#fromRendererResult)method to conveniently construct these stops from a renderer generated fromthe [univariateColorSize](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)smart mapping module.Use [updateVisualVariables()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#updateVisualVariables) to update the renderer'svisual variables with the values matching the slider thumb positions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#stops)
     */
    stops?: ColorSizeStop[];
    /**
     * The view model for the ColorSizeSlider widget. This class contains all the logic(properties and methods) that controls this widget's behavior. See the[ColorSizeSliderViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider-ColorSizeSliderViewModel.html)class to access all properties and methods on the ColorSizeSlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#viewModel)
     */
    viewModel?: ColorSizeSliderViewModelProperties;
  }

  interface ColorSizeSliderViewModel extends SliderViewModel {
    /**
     * A modified version of[SliderViewModel.labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labelFormatFunction),which is a custom function used to format labels. Overrides the default label formatter.This function also supports date formatting.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider-ColorSizeSliderViewModel.html#labelFormatFunction)
     */
    labelFormatFunction: SmartMappingSliderBaseLabelFormatter;
    /**
     * The colors and sizes corresponding with data values in the[ColorVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html) and[SizeVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html) of the rendererassociated with the slider.Use the [fromRendererResult()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider-ColorSizeSliderViewModel.html#fromRendererResult)method to conveniently construct these stops from a renderer generated fromthe [univariateColorSize](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)smart mapping module.Use [updateVisualVariables()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider-ColorSizeSliderViewModel.html#updateVisualVariables) to update the renderer'svisual variables with the values matching the slider thumb positions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider-ColorSizeSliderViewModel.html#stops)
     */
    stops: ColorSizeStop[];

    /**
     * Generates the color ramp gradient rendered on the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider-ColorSizeSliderViewModel.html#getStopInfo)
     *
     *
     */
    getStopInfo(): ColorSizeSliderViewModelStopInfo[];

    on(name: "max-change", eventHandler: ColorSizeSliderViewModelMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: ColorSizeSliderViewModelMinChangeEventHandler): IHandle;

    on(name: "value-change", eventHandler: ColorSizeSliderViewModelValueChangeEventHandler): IHandle;
  }

  interface ColorSizeSliderViewModelConstructor {
    new (properties?: ColorSizeSliderViewModelProperties): ColorSizeSliderViewModel;
  }

  export const ColorSizeSliderViewModel: ColorSizeSliderViewModelConstructor;

  interface ColorSizeSliderViewModelProperties extends SliderViewModelProperties {
    /**
     * A modified version of[SliderViewModel.labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labelFormatFunction),which is a custom function used to format labels. Overrides the default label formatter.This function also supports date formatting.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider-ColorSizeSliderViewModel.html#labelFormatFunction)
     */
    labelFormatFunction?: SmartMappingSliderBaseLabelFormatter;
    /**
     * The colors and sizes corresponding with data values in the[ColorVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html) and[SizeVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html) of the rendererassociated with the slider.Use the [fromRendererResult()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider-ColorSizeSliderViewModel.html#fromRendererResult)method to conveniently construct these stops from a renderer generated fromthe [univariateColorSize](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-univariateColorSize.html#createContinuousRenderer)smart mapping module.Use [updateVisualVariables()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider-ColorSizeSliderViewModel.html#updateVisualVariables) to update the renderer'svisual variables with the values matching the slider thumb positions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider-ColorSizeSliderViewModel.html#stops)
     */
    stops?: ColorSizeStop[];
  }

  export interface ColorSizeSliderViewModelMaxChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface ColorSizeSliderViewModelMinChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  /**
   * The return object of the [getColorStopInfo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider-ColorSizeSliderViewModel.html#getColorStopInfo) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider-ColorSizeSliderViewModel.html#StopInfo)
   */
  export interface ColorSizeSliderViewModelStopInfo extends Object {
    /**
     * The color of the stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider-ColorSizeSliderViewModel.html#StopInfo)
     */
    color: Color;
    /**
     * The offset of the stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider-ColorSizeSliderViewModel.html#StopInfo)
     */
    offset: number;
  }

  export interface ColorSizeSliderViewModelValueChangeEvent {
    index: number;

    oldValue: number;

    type: string;

    value: number;
  }

  /**
   * Defines the object specification for each [stops](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#stops).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#ColorSizeStop)
   */
  export interface ColorSizeStop extends Object {
    /**
     * Features with the given stop `value` will be rendered with  the associated color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#ColorSizeStop)
     */
    color: Color;
    /**
     * Label describing the given `value`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#ColorSizeStop)
     */
    label?: string;
    /**
     * Features with the given stop `value` will be rendered with  the associated size.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#ColorSizeStop)
     */
    size: number;
    /**
     * The data value associated with the given `color` and `size`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#ColorSizeStop)
     */
    value: number;
  }

  export interface ColorSizeSliderMaxChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface ColorSizeSliderMinChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface ColorSizeSliderThumbChangeEvent {
    index: number;

    oldValue: number;

    type: string;

    value: number;
  }

  export interface ColorSizeSliderThumbDragEvent {
    index: number;

    state: string;

    type: string;

    value: number;
  }

  interface ColorSlider extends SmartMappingSliderBase {
    /**
     * Only applicable when three thumbs (i.e. handles) are set on the slider [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#values). This propertyindicates whether the position of the outside handles are synced with the middle, or primary,handle. When enabled, if the primary handle is moved then the outside handle positions are updatedwhile maintaining a fixed distance from the primary handle.Only applicable when [primaryHandleEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#primaryHandleEnabled) is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#handlesSyncedToPrimary)
     *
     * @default true
     */
    handlesSyncedToPrimary: boolean;
    /**
     * When `true`, the slider will render a third handle between thetwo handles already provided by default. This is the primary handle.When [handlesSyncedToPrimary](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#handlesSyncedToPrimary) is `true`, thenthis handle will control the position of the others when moved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#primaryHandleEnabled)
     *
     * @default false
     */
    primaryHandleEnabled: boolean;
    /**
     * The color stops from the [ColorVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html)to link to the slider. The colors in these stops will be usedto render the color gradient on the slider's track. They should match the colorsrendered in the associated layer's renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#stops)
     */
    stops: ColorStop[];
    /**
     * The view model for the ColorSlider widget. This class contains all the logic(properties and methods) that controls this widget's behavior. See the[ColorSliderViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html)class to access all properties and methods on the ColorSlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#viewModel)
     */
    viewModel: ColorSliderViewModel;

    /**
     * A convenience function used to update the properties of a ColorSlider widget instance from the[result](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#ContinuousRendererResult) ofthe [createContinuousRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)method. This method is useful for cases when the app allows the end user to switch data variablesused to render the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#updateFromRendererResult)
     *
     * @param rendererResult The result object from the [createContinuousRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)  method.
     * @param histogramResult The result histogram object from the [histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)  method.
     *
     */
    updateFromRendererResult(rendererResult: ContinuousRendererResult, histogramResult?: HistogramResult): void;

    on(name: "max-change", eventHandler: ColorSliderMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: ColorSliderMinChangeEventHandler): IHandle;

    on(name: "thumb-change", eventHandler: ColorSliderThumbChangeEventHandler): IHandle;

    on(name: "thumb-drag", eventHandler: ColorSliderThumbDragEventHandler): IHandle;
  }

  interface ColorSliderConstructor {
    new (properties?: ColorSliderProperties): ColorSlider;

    /**
     * A convenience function used to create a ColorSlider widget instance from the[result](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#ContinuousRendererResult) ofthe [createContinuousRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)method.This method sets the slider [stops](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#stops), [min](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#min), [max](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#maxDataValue),and [histogramConfig](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#histogramConfig). It is still the developer's responsibility to assign it a proper[container](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#container) and any other optional properties, such as [primaryHandleEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#primaryHandleEnabled).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#fromRendererResult)
     *
     * @param rendererResult The result object from the [createContinuousRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-color.html#createContinuousRenderer)  method.
     * @param histogramResult The result histogram object from the [histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)  method.
     *
     */
    fromRendererResult(rendererResult: ContinuousRendererResult, histogramResult?: HistogramResult): ColorSlider;
  }

  export const ColorSlider: ColorSliderConstructor;

  interface ColorSliderProperties extends SmartMappingSliderBaseProperties {
    /**
     * Only applicable when three thumbs (i.e. handles) are set on the slider [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#values). This propertyindicates whether the position of the outside handles are synced with the middle, or primary,handle. When enabled, if the primary handle is moved then the outside handle positions are updatedwhile maintaining a fixed distance from the primary handle.Only applicable when [primaryHandleEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#primaryHandleEnabled) is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#handlesSyncedToPrimary)
     *
     * @default true
     */
    handlesSyncedToPrimary?: boolean;
    /**
     * When `true`, the slider will render a third handle between thetwo handles already provided by default. This is the primary handle.When [handlesSyncedToPrimary](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#handlesSyncedToPrimary) is `true`, thenthis handle will control the position of the others when moved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#primaryHandleEnabled)
     *
     * @default false
     */
    primaryHandleEnabled?: boolean;
    /**
     * The color stops from the [ColorVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html)to link to the slider. The colors in these stops will be usedto render the color gradient on the slider's track. They should match the colorsrendered in the associated layer's renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#stops)
     */
    stops?: ColorStopProperties[];
    /**
     * The view model for the ColorSlider widget. This class contains all the logic(properties and methods) that controls this widget's behavior. See the[ColorSliderViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html)class to access all properties and methods on the ColorSlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#viewModel)
     */
    viewModel?: ColorSliderViewModelProperties;
  }

  interface ColorSliderViewModel extends SliderViewModel {
    /**
     * Only applicable when three thumbs (i.e. handles) are set on the slider [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html#values). This propertyindicates whether the position of the outside handles are synced with the middle, or primary,handle. When enabled, if the primary handle is moved then the outside handle positions are updatedwhile maintaining a fixed distance from the primary handle.Only applicable when [primaryHandleEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html#primaryHandleEnabled) is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html#handlesSyncedToPrimary)
     *
     * @default true
     */
    handlesSyncedToPrimary: boolean;
    /**
     * A modified version of[SliderViewModel.labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labelFormatFunction),which is a custom function used to format labels on the thumbs, min, max, and averagevalues. Overrides the default label formatter.This function also supports date formatting.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html#labelFormatFunction)
     */
    labelFormatFunction: SmartMappingSliderBaseLabelFormatter;
    /**
     * When `true`, the slider will render a third handle between thetwo handles already provided by default. This is the primary handle.When [handlesSyncedToPrimary](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html#handlesSyncedToPrimary) is `true`, thenthis handle will control the position of the others when moved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html#primaryHandleEnabled)
     *
     * @default false
     */
    primaryHandleEnabled: boolean;
    /**
     * The color stops from the [ColorVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html)to link to the slider. The colors in these stops will be usedto render the color gradient on the slider's track. They should match the colorsrendered in the associated layer's renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html#stops)
     */
    stops: ColorStop[];

    /**
     * Generates the color ramp gradient rendered on the slider track.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html#getStopInfo)
     *
     *
     */
    getStopInfo(): ColorSliderViewModelStopInfo[];

    on(name: "max-change", eventHandler: ColorSliderViewModelMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: ColorSliderViewModelMinChangeEventHandler): IHandle;

    on(name: "value-change", eventHandler: ColorSliderViewModelValueChangeEventHandler): IHandle;
  }

  interface ColorSliderViewModelConstructor {
    new (properties?: ColorSliderViewModelProperties): ColorSliderViewModel;
  }

  export const ColorSliderViewModel: ColorSliderViewModelConstructor;

  interface ColorSliderViewModelProperties extends SliderViewModelProperties {
    /**
     * Only applicable when three thumbs (i.e. handles) are set on the slider [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html#values). This propertyindicates whether the position of the outside handles are synced with the middle, or primary,handle. When enabled, if the primary handle is moved then the outside handle positions are updatedwhile maintaining a fixed distance from the primary handle.Only applicable when [primaryHandleEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html#primaryHandleEnabled) is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html#handlesSyncedToPrimary)
     *
     * @default true
     */
    handlesSyncedToPrimary?: boolean;
    /**
     * A modified version of[SliderViewModel.labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labelFormatFunction),which is a custom function used to format labels on the thumbs, min, max, and averagevalues. Overrides the default label formatter.This function also supports date formatting.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html#labelFormatFunction)
     */
    labelFormatFunction?: SmartMappingSliderBaseLabelFormatter;
    /**
     * When `true`, the slider will render a third handle between thetwo handles already provided by default. This is the primary handle.When [handlesSyncedToPrimary](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html#handlesSyncedToPrimary) is `true`, thenthis handle will control the position of the others when moved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html#primaryHandleEnabled)
     *
     * @default false
     */
    primaryHandleEnabled?: boolean;
    /**
     * The color stops from the [ColorVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html)to link to the slider. The colors in these stops will be usedto render the color gradient on the slider's track. They should match the colorsrendered in the associated layer's renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html#stops)
     */
    stops?: ColorStopProperties[];
  }

  export interface ColorSliderViewModelMaxChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface ColorSliderViewModelMinChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  /**
   * The return object of the [getStopInfo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html#getStopInfo) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html#StopInfo)
   */
  export interface ColorSliderViewModelStopInfo extends Object {
    /**
     * The color of the stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html#StopInfo)
     */
    color: Color;
    /**
     * The offset of the stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html#StopInfo)
     */
    offset: number;
  }

  export interface ColorSliderViewModelValueChangeEvent {
    index: number;

    oldValue: number;

    type: string;

    value: number;
  }

  export interface ColorSliderMaxChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface ColorSliderMinChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface ColorSliderThumbChangeEvent {
    index: number;

    oldValue: number;

    type: string;

    value: number;
  }

  export interface ColorSliderThumbDragEvent {
    index: number;

    state: string;

    type: string;

    value: number;
  }

  interface HeatmapSlider extends Widget {
    /**
     * The colorStopsof the [HeatmapRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html) to associate with theslider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-HeatmapSlider.html#stops)
     */
    stops: HeatmapColorStop[];
    /**
     * The view model for the Heatmap widget. This class contains all the logic(properties and methods) that controls this widget's behavior. See themodule:esri/widgets/smartMapping/HeatmapSlider/HeatmapliderViewModelclass to access all properties and methods on the HeatmapSlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-HeatmapSlider.html#viewModel)
     */
    viewModel: HeatmapSliderViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-HeatmapSlider.html#render)
     *
     *
     */
    render(): any;
  }

  interface HeatmapSliderConstructor {
    new (properties?: HeatmapSliderProperties): HeatmapSlider;

    /**
     * A convenience function used to create a HeatmapSlider widget instance from the[result](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#HeatmapRendererResult) ofthe [heatmapRendererCreator.createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#createRenderer)method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-HeatmapSlider.html#fromHeatmapRendererResult)
     *
     * @param rendererResult The result object from the [heatmapRendererCreator.createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-heatmap.html#createRenderer)  method.
     *
     */
    fromHeatmapRendererResult(rendererResult: HeatmapRendererResult): HeatmapSlider;
  }

  export const HeatmapSlider: HeatmapSliderConstructor;

  interface HeatmapSliderProperties extends WidgetProperties {
    /**
     * The colorStopsof the [HeatmapRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html) to associate with theslider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-HeatmapSlider.html#stops)
     */
    stops?: HeatmapColorStopProperties[];
    /**
     * The view model for the Heatmap widget. This class contains all the logic(properties and methods) that controls this widget's behavior. See themodule:esri/widgets/smartMapping/HeatmapSlider/HeatmapliderViewModelclass to access all properties and methods on the HeatmapSlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-HeatmapSlider.html#viewModel)
     */
    viewModel?: HeatmapSliderViewModelProperties;
  }

  interface HeatmapSliderViewModel extends SliderViewModel {
    /**
     * The colorStopsof the [HeatmapRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html) to associate with theslider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-HeatmapSlider-HeatmapSliderViewModel.html#stops)
     */
    stops: HeatmapColorStop[];

    /**
     * Generates the color ramp gradient rendered on the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-HeatmapSlider-HeatmapSliderViewModel.html#getStopInfo)
     *
     *
     */
    getStopInfo(): HeatmapSliderViewModelStopInfo[];

    on(name: "max-change", eventHandler: HeatmapSliderViewModelMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: HeatmapSliderViewModelMinChangeEventHandler): IHandle;

    on(name: "value-change", eventHandler: HeatmapSliderViewModelValueChangeEventHandler): IHandle;
  }

  interface HeatmapSliderViewModelConstructor {
    new (properties?: HeatmapSliderViewModelProperties): HeatmapSliderViewModel;
  }

  export const HeatmapSliderViewModel: HeatmapSliderViewModelConstructor;

  interface HeatmapSliderViewModelProperties extends SliderViewModelProperties {
    /**
     * The colorStopsof the [HeatmapRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html) to associate with theslider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-HeatmapSlider-HeatmapSliderViewModel.html#stops)
     */
    stops?: HeatmapColorStopProperties[];
  }

  export interface HeatmapSliderViewModelMaxChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface HeatmapSliderViewModelMinChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  /**
   * The return object of the [getColorStopInfo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-HeatmapSlider-HeatmapSliderViewModel.html#getColorStopInfo) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-HeatmapSlider-HeatmapSliderViewModel.html#StopInfo)
   */
  export interface HeatmapSliderViewModelStopInfo extends Object {
    /**
     * The color of the stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-HeatmapSlider-HeatmapSliderViewModel.html#StopInfo)
     */
    color: Color;
    /**
     * The offset of the stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-HeatmapSlider-HeatmapSliderViewModel.html#StopInfo)
     */
    offset: number;
  }

  export interface HeatmapSliderViewModelValueChangeEvent {
    index: number;

    oldValue: number;

    type: string;

    value: number;
  }

  interface OpacitySlider extends SmartMappingSliderBase {
    /**
     * The opacity stops from the [OpacityVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html)to link to the slider. The opacity values in these stops will be usedto render the gradient on the slider. They should match the opacityrendered in the associated layer's opacity visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#stops)
     */
    stops: OpacityStop[];
    /**
     * The view model for the OpacitySlider widget. This class contains all the logic(properties and methods) that controls this widget's behavior. See the[OpacitySliderViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider-OpacitySliderViewModel.html)class to access all properties and methods on the OpacitySlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#viewModel)
     */
    viewModel: OpacitySliderViewModel;

    /**
     * A convenience function used to update the properties of an OpacitySlider widget instance from the[result](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#VisualVariableResult) ofthe [createVisualVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#createVisualVariable)method. This method is useful for cases when the app allows the end user to switch data variablesused to render the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#updateFromVisualVariableResult)
     *
     * @param visualVariableResult The result object from the [createVisualVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#createVisualVariable)  method.
     * @param histogramResult The result histogram object from the [histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)  method.
     *
     */
    updateFromVisualVariableResult(
      visualVariableResult: opacityVisualVariableResult,
      histogramResult?: HistogramResult
    ): void;

    on(name: "max-change", eventHandler: OpacitySliderMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: OpacitySliderMinChangeEventHandler): IHandle;

    on(name: "thumb-change", eventHandler: OpacitySliderThumbChangeEventHandler): IHandle;

    on(name: "thumb-drag", eventHandler: OpacitySliderThumbDragEventHandler): IHandle;
  }

  interface OpacitySliderConstructor {
    new (properties?: OpacitySliderProperties): OpacitySlider;

    /**
     * A convenience function used to create an OpacitySlider widget instance from the[result](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#VisualVariableResult) ofthe [createVisualVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#createVisualVariable)method.This method sets the slider [stops](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#stops), [min](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#min), [max](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#maxDataValue),and [histogramConfig](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#histogramConfig). It is still the developer's responsibility to assign it a proper[container](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#container) and any other optional properties.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#fromVisualVariableResult)
     *
     * @param visualVariableResult The result object from the [createVisualVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-opacity.html#createVisualVariable)  method.
     * @param histogramResult The result histogram object from the [histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)  method.
     *
     */
    fromVisualVariableResult(
      visualVariableResult: opacityVisualVariableResult,
      histogramResult?: HistogramResult
    ): OpacitySlider;
  }

  export const OpacitySlider: OpacitySliderConstructor;

  interface OpacitySliderProperties extends SmartMappingSliderBaseProperties {
    /**
     * The opacity stops from the [OpacityVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html)to link to the slider. The opacity values in these stops will be usedto render the gradient on the slider. They should match the opacityrendered in the associated layer's opacity visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#stops)
     */
    stops?: OpacityStopProperties[];
    /**
     * The view model for the OpacitySlider widget. This class contains all the logic(properties and methods) that controls this widget's behavior. See the[OpacitySliderViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider-OpacitySliderViewModel.html)class to access all properties and methods on the OpacitySlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#viewModel)
     */
    viewModel?: OpacitySliderViewModelProperties;
  }

  interface OpacitySliderViewModel extends SliderViewModel {
    /**
     * A modified version of[SliderViewModel.labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labelFormatFunction),which is a custom function used to format labels. Overrides the default label formatter.This function also supports date formatting.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider-OpacitySliderViewModel.html#labelFormatFunction)
     */
    labelFormatFunction: SmartMappingSliderBaseLabelFormatter;
    /**
     * The opacity stops from the [OpacityVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html)to link to the slider. The opacity values in these stops will be usedto render the gradient on the slider. They should match the opacityrendered in the associated layer's opacity visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider-OpacitySliderViewModel.html#stops)
     */
    stops: OpacityStop[];

    /**
     * Generates the opacity ramp gradient rendered on the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider-OpacitySliderViewModel.html#getStopInfo)
     *
     *
     */
    getStopInfo(): OpacitySliderViewModelStopInfo[];

    on(name: "max-change", eventHandler: OpacitySliderViewModelMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: OpacitySliderViewModelMinChangeEventHandler): IHandle;

    on(name: "value-change", eventHandler: OpacitySliderViewModelValueChangeEventHandler): IHandle;
  }

  interface OpacitySliderViewModelConstructor {
    new (properties?: OpacitySliderViewModelProperties): OpacitySliderViewModel;
  }

  export const OpacitySliderViewModel: OpacitySliderViewModelConstructor;

  interface OpacitySliderViewModelProperties extends SliderViewModelProperties {
    /**
     * A modified version of[SliderViewModel.labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labelFormatFunction),which is a custom function used to format labels. Overrides the default label formatter.This function also supports date formatting.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider-OpacitySliderViewModel.html#labelFormatFunction)
     */
    labelFormatFunction?: SmartMappingSliderBaseLabelFormatter;
    /**
     * The opacity stops from the [OpacityVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html)to link to the slider. The opacity values in these stops will be usedto render the gradient on the slider. They should match the opacityrendered in the associated layer's opacity visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider-OpacitySliderViewModel.html#stops)
     */
    stops?: OpacityStopProperties[];
  }

  export interface OpacitySliderViewModelMaxChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface OpacitySliderViewModelMinChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  /**
   * The return object of the [getStopInfo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider-OpacitySliderViewModel.html#getStopInfo) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider-OpacitySliderViewModel.html#StopInfo)
   */
  export interface OpacitySliderViewModelStopInfo extends Object {
    /**
     * The color of the stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider-OpacitySliderViewModel.html#StopInfo)
     */
    color: Color;
    /**
     * The offset of the stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider-OpacitySliderViewModel.html#StopInfo)
     */
    offset: number;
  }

  export interface OpacitySliderViewModelValueChangeEvent {
    index: number;

    oldValue: number;

    type: string;

    value: number;
  }

  export interface OpacitySliderMaxChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface OpacitySliderMinChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface OpacitySliderThumbChangeEvent {
    index: number;

    oldValue: number;

    type: string;

    value: number;
  }

  export interface OpacitySliderThumbDragEvent {
    index: number;

    state: string;

    type: string;

    value: number;
  }

  interface SizeSlider extends SmartMappingSliderBase {
    /**
     * The size stops from the [SizeVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html)to link to the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#stops)
     */
    stops: SizeStop[];
    /**
     * The view model for the SizeSlider widget. This class contains all the logic(properties and methods) that controls this widget's behavior. See the[SizeSliderViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider-SizeSliderViewModel.html)class to access all properties and methods on the SizeSlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#viewModel)
     */
    viewModel: SizeSliderViewModel;

    /**
     * A convenience function used to update the properties of a SizeSlider widget instance from the[result](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#ContinuousRendererResult) ofthe [createContinuousRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)method. This method is useful for cases when the app allows the end user to switch data variablesused to render the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#updateFromRendererResult)
     *
     * @param rendererResult The result object from the [createContinuousRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)  method.
     * @param histogramResult The result histogram object from the [histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)  method.
     *
     */
    updateFromRendererResult(rendererResult: sizeContinuousRendererResult, histogramResult?: HistogramResult): void;
    /**
     * A convenience function used to update the [SizeVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html)to match the values of the [stops](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#stops) on the slider.This is particularly useful for Size visual variables that have a set[minDataValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#minDataValue) and[maxDataValue](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#minDataValue).This method will properly reconstruct the variable to set on the renderer so it matches thestops on the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#updateVisualVariable)
     *
     * @param sizeVariable The size visual variable  from the renderer to update to the set [stops](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#stops) on the slider.
     *
     */
    updateVisualVariable(sizeVariable: SizeVariable): SizeVariable;

    on(name: "max-change", eventHandler: SizeSliderMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: SizeSliderMinChangeEventHandler): IHandle;

    on(name: "thumb-change", eventHandler: SizeSliderThumbChangeEventHandler): IHandle;

    on(name: "thumb-drag", eventHandler: SizeSliderThumbDragEventHandler): IHandle;
  }

  interface SizeSliderConstructor {
    new (properties?: SizeSliderProperties): SizeSlider;

    /**
     * A convenience function used to create a SizeSlider widget instance from the[result](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#ContinuousRendererResult) ofthe [createContinuousRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)method.This method sets the slider [stops](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#stops), [min](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#min), [max](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#maxDataValue),and [histogramConfig](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#histogramConfig). It is still the developer's responsibility to assign it a proper[container](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#container) and any other optional properties.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#fromRendererResult)
     *
     * @param rendererResult The result object from the [createContinuousRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-creators-size.html#createContinuousRenderer)  method.
     * @param histogramResult The result histogram object from the [histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html#histogram)  method.
     *
     */
    fromRendererResult(rendererResult: sizeContinuousRendererResult, histogramResult?: HistogramResult): SizeSlider;
  }

  export const SizeSlider: SizeSliderConstructor;

  interface SizeSliderProperties extends SmartMappingSliderBaseProperties {
    /**
     * The size stops from the [SizeVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html)to link to the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#stops)
     */
    stops?: SizeStopProperties[];
    /**
     * The view model for the SizeSlider widget. This class contains all the logic(properties and methods) that controls this widget's behavior. See the[SizeSliderViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider-SizeSliderViewModel.html)class to access all properties and methods on the SizeSlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#viewModel)
     */
    viewModel?: SizeSliderViewModelProperties;
  }

  interface SizeSliderViewModel extends SliderViewModel {
    /**
     * A modified version of[SliderViewModel.labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labelFormatFunction),which is a custom function used to format labels. Overrides the default label formatter.This function also supports date formatting.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider-SizeSliderViewModel.html#labelFormatFunction)
     */
    labelFormatFunction: SmartMappingSliderBaseLabelFormatter;
    /**
     * The size stops from the [SizeVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html)to link to the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider-SizeSliderViewModel.html#stops)
     */
    stops: SizeStop[];

    on(name: "max-change", eventHandler: SizeSliderViewModelMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: SizeSliderViewModelMinChangeEventHandler): IHandle;

    on(name: "value-change", eventHandler: SizeSliderViewModelValueChangeEventHandler): IHandle;
  }

  interface SizeSliderViewModelConstructor {
    new (properties?: SizeSliderViewModelProperties): SizeSliderViewModel;
  }

  export const SizeSliderViewModel: SizeSliderViewModelConstructor;

  interface SizeSliderViewModelProperties extends SliderViewModelProperties {
    /**
     * A modified version of[SliderViewModel.labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#labelFormatFunction),which is a custom function used to format labels. Overrides the default label formatter.This function also supports date formatting.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider-SizeSliderViewModel.html#labelFormatFunction)
     */
    labelFormatFunction?: SmartMappingSliderBaseLabelFormatter;
    /**
     * The size stops from the [SizeVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html)to link to the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider-SizeSliderViewModel.html#stops)
     */
    stops?: SizeStopProperties[];
  }

  export interface SizeSliderViewModelMaxChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface SizeSliderViewModelMinChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface SizeSliderViewModelValueChangeEvent {
    index: number;

    oldValue: number;

    type: string;

    value: number;
  }

  export interface SizeSliderMaxChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface SizeSliderMinChangeEvent {
    oldValue: number;

    type: string;

    value: number;
  }

  export interface SizeSliderThumbChangeEvent {
    index: number;

    oldValue: number;

    type: string;

    value: number;
  }

  export interface SizeSliderThumbDragEvent {
    index: number;

    state: string;

    type: string;

    value: number;
  }

  interface SmartMappingSliderBase extends Widget {
    /**
     * The [Histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html) associated with the data represented on the slider. The bins are typicallygenerated using the [histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html)statistics function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#histogramConfig)
     */
    histogramConfig: HistogramConfig;
    /**
     * A modified version of[Slider.labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelFormatFunction),which is a custom function used to format labels on the thumbs, min, max, and averagevalues. Overrides the default label formatter.This function also supports date formatting.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#labelFormatFunction)
     */
    labelFormatFunction: SmartMappingSliderBaseLabelFormatter;
    /**
     * The maximum value or upper bound of the slider. If the largestslider [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#values) _in the constructor_ is greater than the `max` set inthis property, then the `max` will update to match the largestslider [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#values).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#max)
     */
    max: number;
    /**
     * The minimum value or lower bound of the slider. If the smallestslider [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#values) _in the constructor_ is greater than the `min` set inthis property, then the `min` will update to match the smallestslider [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#values).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#min)
     */
    min: number;
    /**
     * The state of the view model.**Possible Values:** ready | disabled
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#state)
     */
    readonly state: string;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#render)
     *
     *
     */
    render(): any;
  }

  interface SmartMappingSliderBaseConstructor {
    new (properties?: SmartMappingSliderBaseProperties): SmartMappingSliderBase;
  }

  export const SmartMappingSliderBase: SmartMappingSliderBaseConstructor;

  interface SmartMappingSliderBaseProperties extends WidgetProperties {
    /**
     * The [Histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html) associated with the data represented on the slider. The bins are typicallygenerated using the [histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html)statistics function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#histogramConfig)
     */
    histogramConfig?: HistogramConfig;
    /**
     * A modified version of[Slider.labelFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelFormatFunction),which is a custom function used to format labels on the thumbs, min, max, and averagevalues. Overrides the default label formatter.This function also supports date formatting.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#labelFormatFunction)
     */
    labelFormatFunction?: SmartMappingSliderBaseLabelFormatter;
    /**
     * The maximum value or upper bound of the slider. If the largestslider [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#values) _in the constructor_ is greater than the `max` set inthis property, then the `max` will update to match the largestslider [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#values).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#max)
     */
    max?: number;
    /**
     * The minimum value or lower bound of the slider. If the smallestslider [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#values) _in the constructor_ is greater than the `min` set inthis property, then the `min` will update to match the smallestslider [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#values).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#min)
     */
    min?: number;
  }

  /**
   * Configuration options for defining the slider's [Histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#HistogramConfig)
   */
  export interface HistogramConfig extends Object {
    /**
     * Indicates the average value of the dataset. When set,  a solid line on the histogram will render at the location of the average value along  with a label defaulting to the value set here.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#HistogramConfig)
     */
    average?: number;
    /**
     * Function for styling bars representing histogram bins.  This can be used to style bins or add custom interaction to them. For  example, you can use this function to color bins that match the colors on the slider's track.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#HistogramConfig)
     */
    barCreatedFunction?: BarCreatedFunction;
    /**
     * The bins of the histogram. This is  an array of objects indicating the range and count of data in each bin. This value is  typically retrieved from the [histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-smartMapping-statistics-histogram.html)  function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#HistogramConfig)
     */
    bins?: Bin[];
    /**
     * When set, renders lines on the histogram that indicate important or  meaningful values to the end user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#HistogramConfig)
     */
    dataLines?: HistogramConfigDataLines[];
    /**
     * Function  that fires each time a data line is created.  You can use this to style individual [dataLines](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#dataLines) on the data axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#HistogramConfig)
     */
    dataLineCreatedFunction?: DataLineCreatedFunction;
    /**
     * Indicates the standard deviation of the dataset.  When set, data lines are on the histogram at the locations of the standard deviations  above and below the `average`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#HistogramConfig)
     */
    standardDeviation?: number;
    /**
     * Indicates the standard deviation of the dataset.  When set, data lines are on the histogram at the locations of the standard deviations  above and below the `average`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#HistogramConfig)
     */
    standardDeviationCount?: number;
  }

  export type SmartMappingSliderBaseLabelFormatter = (value: number, type?: string, index?: number) => string;

  export interface HistogramConfigDataLines extends Object {
    /**
     * The value on the data axis of the histogram where a line will be rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#HistogramConfig)
     */
    value?: number;
    /**
     * The label associated with the line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#HistogramConfig)
     */
    label?: string | number;
  }

  interface utils {
    /**
     * Computes and returns standard deviation values based on the given average and standard deviation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-support-utils.html#getDeviationValues)
     *
     * @param standardDeviation The standard deviation from the given `average`.
     * @param average The average of the dataset from which to compute standard deviation values.
     * @param count The number of standard deviations from the mean to compute.
     *
     */
    getDeviationValues(standardDeviation: number, average: number, count: number): number[];
  }

  export const utils: utils;

  interface SpinnerViewModel extends Accessor {}

  interface SpinnerViewModelConstructor {
    new (properties?: SpinnerViewModelProperties): SpinnerViewModel;
  }

  export const SpinnerViewModel: SpinnerViewModelConstructor;

  interface SpinnerViewModelProperties {}

  interface GeolocationPositioning {
    /**
     * The HTML5 Geolocation Position options for locating. Refer to[Geolocation API Specification](http://www.w3.org/TR/geolocation-API/#position-options)for details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-GeolocationPositioning.html#geolocationOptions)
     *
     * @default { maximumAge: 0, timeout: 15000, enableHighAccuracy: true }
     */
    geolocationOptions: any;
    /**
     * Indicates whether to navigate the view to the position and scale of the geolocated result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-GeolocationPositioning.html#goToLocationEnabled)
     *
     * @default true
     */
    goToLocationEnabled: boolean;
    /**
     * The graphic used to show the user's location on the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-GeolocationPositioning.html#graphic)
     */
    graphic: Graphic;
    /**
     * The scale to set on the view when navigating to the position of the geolocated result.If a scale value is not explicitly set, then the view will navigate to a default scale of `2500`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-GeolocationPositioning.html#scale)
     *
     * @default null
     */
    scale: number;
    /**
     * The view associated with the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-GeolocationPositioning.html#view)
     */
    view: MapView | SceneView;
  }

  interface GeolocationPositioningConstructor {
    new (): GeolocationPositioning;
  }

  export const GeolocationPositioning: GeolocationPositioningConstructor;

  interface GeolocationPositioningProperties {
    /**
     * The HTML5 Geolocation Position options for locating. Refer to[Geolocation API Specification](http://www.w3.org/TR/geolocation-API/#position-options)for details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-GeolocationPositioning.html#geolocationOptions)
     *
     * @default { maximumAge: 0, timeout: 15000, enableHighAccuracy: true }
     */
    geolocationOptions?: any;
    /**
     * Indicates whether to navigate the view to the position and scale of the geolocated result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-GeolocationPositioning.html#goToLocationEnabled)
     *
     * @default true
     */
    goToLocationEnabled?: boolean;
    /**
     * The graphic used to show the user's location on the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-GeolocationPositioning.html#graphic)
     */
    graphic?: GraphicProperties;
    /**
     * The scale to set on the view when navigating to the position of the geolocated result.If a scale value is not explicitly set, then the view will navigate to a default scale of `2500`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-GeolocationPositioning.html#scale)
     *
     * @default null
     */
    scale?: number;
    /**
     * The view associated with the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-GeolocationPositioning.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
  }

  interface GoTo {
    /**
     * This function provides the ability to override either the[MapView goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#goTo) or[SceneView goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo) methods.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-GoTo.html#goToOverride)
     */
    goToOverride: GoToOverride;
  }

  interface GoToConstructor {
    new (): GoTo;
  }

  export const GoTo: GoToConstructor;

  interface GoToProperties {
    /**
     * This function provides the ability to override either the[MapView goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#goTo) or[SceneView goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo) methods.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-GoTo.html#goToOverride)
     */
    goToOverride?: GoToOverride;
  }

  interface widget {
    /**
     * This convenience decorator is used to help simplify accessibility within the widget keyboard events.For example, it can be used to execute a method when the `space` or `enter` keys are pressed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-widget.html#accessibleHandler)
     *
     *
     */
    accessibleHandler(): Function;
    /**
     * Utility method used for creating CSS animation/transition functions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-widget.html#cssTransition)
     *
     * @param type The animation/transition type.**Possible Values:** enter | exit
     * @param className The animation/transition class name.
     *
     */
    cssTransition(type: string, className: string): Function;
    /**
     * Utility method used to determine if the directionalityof the text of the document is right-to-left.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-widget.html#isRTL)
     *
     *
     */
    isRTL(): boolean;
    /**
     * Utility method used for joining CSS classes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-widget.html#join)
     *
     * @param classNames The class names to join.
     *
     */
    join(...classNames: string[]): string;
    /**
     * This convenience decorator marks a property for automatic rendering. It isuseful when you want rendering to be scheduled whenever the decorated property changes.Many times this decorator is used in conjunction with the [@property](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-accessorSupport-decorators.html)decorator. Rendering on deep properties is also supported by providing a path to a property deeper in the instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-widget.html#renderable)
     *
     * @param propertyName Names of nested renderable properties.
     *
     */
    renderable(propertyName?: string | string[]): Function;
    /**
     * This convenience method is used to assign an [HTMLElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement) DOM node reference to a variable.It does this by taking a [HTMLElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement) passed from either the [afterUpdate](https://developers.arcgis.com/javascript/latest/guide/custom-widget/index.html#widget-rendering)or [afterCreate](https://developers.arcgis.com/javascript/latest/guide/custom-widget/index.html#widget-rendering) callbacks. In order to use this, the element must have a set[data-node-ref](https://developers.arcgis.com/javascript/latest/guide/custom-widget/index.html#widget-rendering) attribute. In addition, itmust also be bound to the widget instance, e.g. `bind={this}`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-widget.html#storeNode)
     *
     * @param node The referenced DOM node.
     *
     */
    storeNode(node: HTMLElement): void;
    /**
     * This convenience method is used to render the JSX in the [widget.render()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#render) method.It is required to import `tsx` even though it is not explicitly called.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-widget.html#tsx)
     *
     * @param selector The element to create.
     * @param properties The element's properties.
     * @param children The element's children.
     *
     */
    tsx(selector: string, properties?: any, children?: any): any;
    /**
     * This convenience decorator helps dispatch view model events on the widget instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-widget.html#vmEvent)
     *
     * @param eventNames The event names to re-dispatch.
     *
     */
    vmEvent(eventNames: string | string[]): Function;
  }

  export const widget: widget;

  export type GoToOverride = (view: MapView | SceneView, goToParameters: GoToParameters) => void;

  /**
   * The following parameters passed to either the [MapView's goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#goTo)or [SceneView's goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo) functions. For additional informationon what can be passed to its `target` or `options`, please refer to documentation for either the[MapView's goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#goTo)or [SceneView's goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo) functions.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-widget.html#GoToParameters)
   */
  export interface GoToParameters extends Object {
    /**
     * The target location/viewpoint to animate to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-widget.html#GoToParameters)
     */
    target: any;
    /**
     * Animation options.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-widget.html#GoToParameters)
     */
    options?: any;
  }

  interface TimeSlider extends Widget {
    /**
     * Lists the specific locations on the timeline where handle(s) will snap to when manipulated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#effectiveStops)
     *
     * @default null
     */
    readonly effectiveStops: Date[];
    /**
     * The temporal extent of the entire slider.It defines the entire time period within which you can visualizeyour time aware data using the time slider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#fullTimeExtent)
     */
    fullTimeExtent: TimeExtent;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#iconClass)
     */
    readonly iconClass: string;
    /**
     * When `true`, the time slider will play its animation in a loop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#loop)
     *
     * @default true
     */
    loop: boolean;
    /**
     * The time slider mode. This property is used for defining if the temporal data will be displayedcumulatively up to a point in time, a single instant in time, or within a time range. Seethe following table for possible values.Possible Values       | Description   | Example |----------------------|-------------- | ------- |instant               | The slider will show temporal data that falls on a single instance in time. Set the [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#values) property to an array with one date. | <img alt="mode-instance" src="../../assets/img/apiref/widgets/timeslider/mode-instance.png"> |time-window           | The slider will show temporal data that falls within a given time range. This is the default. Set [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#values) property to an array with two dates. | <img alt="mode-instance" src="../../assets/img/apiref/widgets/timeslider/mode-time-window.png"> |cumulative-from-start | Similar to `time-window` with the start time is always pinned to the start of the slider. Set the [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#values) property to have one date, which is the end date. | <img alt="mode-instance" src="../../assets/img/apiref/widgets/timeslider/mode-from-start.png"> |cumulative-from-end   | Also, similar to the `time-window` with the end time pinned to the end of the slider. Set the [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#values) property to have one date, which is the start date. | <img alt="mode-instance" src="../../assets/img/apiref/widgets/timeslider/mode-from-end.png"> |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#mode)
     *
     * @default "time-window"
     */
    mode: "instant" | "time-window" | "cumulative-from-start" | "cumulative-from-end";
    /**
     * The time (in milliseconds) between animation steps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#playRate)
     *
     * @default 1000
     */
    playRate: number;
    /**
     * Defines specific locations on the time slider where thumbs will snap to when manipulated.If unspecified, ten evenly spaced stops will be added.To define regularly spaced stops based on specified [time interval](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeInterval.html) and[time extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html), use [StopsByInterval](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#StopsByInterval).Use [StopsByCount](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#StopsByCount) to define evenly spaced timeline stops. Lastly,for irregular dates use [StopsByDates](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#StopsByDates). Please refer below for examplesof each of these objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#stops)
     *
     * @default { count : 10 }
     */
    stops: StopsByDates | StopsByCount | StopsByInterval;
    /**
     * The current time extent of the time slider. This property can be watched forupdates and used to update the time extent property in queries and/or the layer filters and effects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#timeExtent)
     *
     * @default null
     */
    readonly timeExtent: TimeExtent;
    /**
     * Shows/hides time in the display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#timeVisible)
     *
     * @default false
     */
    timeVisible: boolean;
    /**
     * The user defined time extent. Values define the current location of time sliderthumbs. The "time-window" [mode](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#mode) has two values, the other modes only have one.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#values)
     *
     * @default null
     */
    values: Date[];
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).If this property is set, the TimeSlider widget will update the view's timeExtentproperty whenever the time slider is manipulated or updated programmatically. This property will affectany time-aware layer in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[TimeSliderViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#viewModel)
     */
    viewModel: TimeSliderViewModel;

    /**
     * Incrementally moves the time extent forward one stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#next)
     *
     *
     */
    next(): void;
    /**
     * Initiates the time slider's temporal playback.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#play)
     *
     *
     */
    play(): void;
    /**
     * Incrementally moves the time extent back one stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#previous)
     *
     *
     */
    previous(): void;
    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#render)
     *
     *
     */
    render(): any;
    /**
     * Stops the time slider's temporal playback.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#stop)
     *
     *
     */
    stop(): void;
  }

  interface TimeSliderConstructor {
    new (properties?: TimeSliderProperties): TimeSlider;
  }

  export const TimeSlider: TimeSliderConstructor;

  interface TimeSliderProperties extends WidgetProperties {
    /**
     * The temporal extent of the entire slider.It defines the entire time period within which you can visualizeyour time aware data using the time slider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#fullTimeExtent)
     */
    fullTimeExtent?: TimeExtentProperties;
    /**
     * When `true`, the time slider will play its animation in a loop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#loop)
     *
     * @default true
     */
    loop?: boolean;
    /**
     * The time slider mode. This property is used for defining if the temporal data will be displayedcumulatively up to a point in time, a single instant in time, or within a time range. Seethe following table for possible values.Possible Values       | Description   | Example |----------------------|-------------- | ------- |instant               | The slider will show temporal data that falls on a single instance in time. Set the [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#values) property to an array with one date. | <img alt="mode-instance" src="../../assets/img/apiref/widgets/timeslider/mode-instance.png"> |time-window           | The slider will show temporal data that falls within a given time range. This is the default. Set [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#values) property to an array with two dates. | <img alt="mode-instance" src="../../assets/img/apiref/widgets/timeslider/mode-time-window.png"> |cumulative-from-start | Similar to `time-window` with the start time is always pinned to the start of the slider. Set the [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#values) property to have one date, which is the end date. | <img alt="mode-instance" src="../../assets/img/apiref/widgets/timeslider/mode-from-start.png"> |cumulative-from-end   | Also, similar to the `time-window` with the end time pinned to the end of the slider. Set the [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#values) property to have one date, which is the start date. | <img alt="mode-instance" src="../../assets/img/apiref/widgets/timeslider/mode-from-end.png"> |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#mode)
     *
     * @default "time-window"
     */
    mode?: "instant" | "time-window" | "cumulative-from-start" | "cumulative-from-end";
    /**
     * The time (in milliseconds) between animation steps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#playRate)
     *
     * @default 1000
     */
    playRate?: number;
    /**
     * Defines specific locations on the time slider where thumbs will snap to when manipulated.If unspecified, ten evenly spaced stops will be added.To define regularly spaced stops based on specified [time interval](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeInterval.html) and[time extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html), use [StopsByInterval](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#StopsByInterval).Use [StopsByCount](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#StopsByCount) to define evenly spaced timeline stops. Lastly,for irregular dates use [StopsByDates](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#StopsByDates). Please refer below for examplesof each of these objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#stops)
     *
     * @default { count : 10 }
     */
    stops?: StopsByDates | StopsByCount | StopsByInterval;
    /**
     * Shows/hides time in the display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#timeVisible)
     *
     * @default false
     */
    timeVisible?: boolean;
    /**
     * The user defined time extent. Values define the current location of time sliderthumbs. The "time-window" [mode](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#mode) has two values, the other modes only have one.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#values)
     *
     * @default null
     */
    values?: DateProperties[];
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).If this property is set, the TimeSlider widget will update the view's timeExtentproperty whenever the time slider is manipulated or updated programmatically. This property will affectany time-aware layer in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[TimeSliderViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#viewModel)
     */
    viewModel?: TimeSliderViewModelProperties;
  }

  interface TimeSliderViewModel extends Accessor {
    /**
     * Defined specific locations on the timeline that the handles will snap to when manipulated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#effectiveStops)
     *
     * @default null
     */
    readonly effectiveStops: Date[];
    /**
     * The temporal extent of the entire slider.It defines the entire time period within which you can visualizeyour time aware data using the time slider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#fullTimeExtent)
     */
    fullTimeExtent: TimeExtent;
    /**
     * If animating, the time indicator(s) will restart if they reach the edge.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#loop)
     *
     * @default true
     */
    loop: boolean;
    /**
     * The time slider mode. This property is used for defining if the temporal data will be displayedcumulatively up to a point in time, a single instant in time, or within a time range. Seethe following table for possible values.Possible Values       | Description   | Example |----------------------|-------------- | ------- |instant               | The slider will show temporal data that falls on a single instance in time. Set the [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#values) property to an array with one date. | <img alt="mode-instance" src="../../assets/img/apiref/widgets/timeslider/mode-instance.png"> |time-window           | The slider will show temporal data that falls within a given time range. This is the default. Set [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#values) property to an array with two dates. | <img alt="mode-instance" src="../../assets/img/apiref/widgets/timeslider/mode-time-window.png"> |cumulative-from-start | Similar to `time-window` with the start time is always pinned to the start of the slider. Set the [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#values) property to have one date, which is the end date. | <img alt="mode-instance" src="../../assets/img/apiref/widgets/timeslider/mode-from-start.png"> |cumulative-from-end   | Also, similar to the `time-window` with the end time pinned to the end of the slider. Set the [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#values) property to have one date, which is the start date. | <img alt="mode-instance" src="../../assets/img/apiref/widgets/timeslider/mode-from-end.png"> |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#mode)
     *
     * @default time-window
     */
    mode: "instant" | "time-window" | "cumulative-from-start" | "cumulative-from-end";
    /**
     * The time (in milliseconds) between playback steps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#playRate)
     *
     * @default 1000
     */
    playRate: number;
    /**
     * The view model's state.Value | Description------------|-------------disabled | not ready yetready    | ready for time navigationplaying  | time is playing in the navigator
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: "disabled" | "ready" | "playing";
    /**
     * Defines specific locations on the time slider where thumbs will snap to when manipulated.If unspecified, ten evenly spaced stops will be added.For continuous sliding set `stops` to null.```jstimeSlider.viewModel.stops = null;```To define regularly spaced stops, parse an object with interval and timeExtent propertieswith types TimeInterval and TimeExtent respectively. The timeExtent property is optionaland used to confine stops to a certain date range. This property is useful tocommence stops on a spcific day or the week or month.```js{  interval: TimeInterval,  timeExtent: TimeExtent}``````js// Add yearly intervals starting from the beginning of the TimeSlider.timeSlider.viewModel.stops = {  interval: {    value: 1,    unit: "years"  }}```Rather than regular time intervals the TimeSlider can be divided into evenly spacedstops. As with the previous method, divisions can be confined to a specific date rangeusing the optional timeExtent property.```js// Add stops at 15 evenly spaced intervals.timeSlider.viewModel.stops = {  count: 15}```For irregular spaced stops simply assign an array of dates as demonstrated below.```js// Add nine irregular stops.timeSlider.viewModel.stops = {  dates: [    new Date(2000, 0, 1), new Date(2001, 3, 8), new Date(2002, 0, 10),    new Date(2003, 12, 8), new Date(2004, 2, 19), new Date(2005, 7, 5),    new Date(2006, 9, 11), new Date(2007, 11, 21), new Date(2008, 1, 10)  ]}```Lastly, to constrain or offset division by count or interval use the optional timeExtent property.```js// Add yearly stops from Christmas 2019 to Christmas 2029 onlytimeSlider.viewModel.stops = {  interval: {    value: 1,    unit: "years"  },  timeExtent: {    start: new Date(2019, 11, 25),    end: new Date(2029, 11, 25)  }}// Likewise, add stops that represent quarters of 2019 only.timeSlider.viewModel.stops = {  count: 4,  timeExtent: {    start: new Date(2019, 0, 1),    end: new Date(2020, 0, 1)  }}```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#stops)
     *
     * @default { count : 10 }
     */
    stops: StopsByDates | StopsByCount | StopsByInterval;
    /**
     * The current time extent of the time slider. This property can be watched forupdates and used to update the time extent property in queries and/or the layer filters and effects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#timeExtent)
     *
     * @default null
     */
    readonly timeExtent: TimeExtent;
    /**
     * The user defined time extent. Values define the current location of time sliderthumbs. The "time-window" [mode](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#mode) has two values, the other modes only have one.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#values)
     *
     * @default null
     */
    values: Date[];
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).If this property is set, the TimeSlider widget will update the view's timeExtentproperty whenever the time slider is manipulated or updated programmatically. This property will affectany time-aware layer in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#view)
     */
    view: MapView | SceneView;

    /**
     * Incrementally moves the time extent forward one stop
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#next)
     *
     *
     */
    next(): void;
    /**
     * Initiates the time slider's temporal playback.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#play)
     *
     *
     */
    play(): void;
    /**
     * Incrementally moves the time extent back one stop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#previous)
     *
     *
     */
    previous(): void;
    /**
     * Stops the time slider's temporal playback.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#stop)
     *
     *
     */
    stop(): void;
  }

  interface TimeSliderViewModelConstructor {
    new (properties?: TimeSliderViewModelProperties): TimeSliderViewModel;
  }

  export const TimeSliderViewModel: TimeSliderViewModelConstructor;

  interface TimeSliderViewModelProperties {
    /**
     * The temporal extent of the entire slider.It defines the entire time period within which you can visualizeyour time aware data using the time slider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#fullTimeExtent)
     */
    fullTimeExtent?: TimeExtentProperties;
    /**
     * If animating, the time indicator(s) will restart if they reach the edge.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#loop)
     *
     * @default true
     */
    loop?: boolean;
    /**
     * The time slider mode. This property is used for defining if the temporal data will be displayedcumulatively up to a point in time, a single instant in time, or within a time range. Seethe following table for possible values.Possible Values       | Description   | Example |----------------------|-------------- | ------- |instant               | The slider will show temporal data that falls on a single instance in time. Set the [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#values) property to an array with one date. | <img alt="mode-instance" src="../../assets/img/apiref/widgets/timeslider/mode-instance.png"> |time-window           | The slider will show temporal data that falls within a given time range. This is the default. Set [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#values) property to an array with two dates. | <img alt="mode-instance" src="../../assets/img/apiref/widgets/timeslider/mode-time-window.png"> |cumulative-from-start | Similar to `time-window` with the start time is always pinned to the start of the slider. Set the [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#values) property to have one date, which is the end date. | <img alt="mode-instance" src="../../assets/img/apiref/widgets/timeslider/mode-from-start.png"> |cumulative-from-end   | Also, similar to the `time-window` with the end time pinned to the end of the slider. Set the [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#values) property to have one date, which is the start date. | <img alt="mode-instance" src="../../assets/img/apiref/widgets/timeslider/mode-from-end.png"> |
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#mode)
     *
     * @default time-window
     */
    mode?: "instant" | "time-window" | "cumulative-from-start" | "cumulative-from-end";
    /**
     * The time (in milliseconds) between playback steps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#playRate)
     *
     * @default 1000
     */
    playRate?: number;
    /**
     * Defines specific locations on the time slider where thumbs will snap to when manipulated.If unspecified, ten evenly spaced stops will be added.For continuous sliding set `stops` to null.```jstimeSlider.viewModel.stops = null;```To define regularly spaced stops, parse an object with interval and timeExtent propertieswith types TimeInterval and TimeExtent respectively. The timeExtent property is optionaland used to confine stops to a certain date range. This property is useful tocommence stops on a spcific day or the week or month.```js{  interval: TimeInterval,  timeExtent: TimeExtent}``````js// Add yearly intervals starting from the beginning of the TimeSlider.timeSlider.viewModel.stops = {  interval: {    value: 1,    unit: "years"  }}```Rather than regular time intervals the TimeSlider can be divided into evenly spacedstops. As with the previous method, divisions can be confined to a specific date rangeusing the optional timeExtent property.```js// Add stops at 15 evenly spaced intervals.timeSlider.viewModel.stops = {  count: 15}```For irregular spaced stops simply assign an array of dates as demonstrated below.```js// Add nine irregular stops.timeSlider.viewModel.stops = {  dates: [    new Date(2000, 0, 1), new Date(2001, 3, 8), new Date(2002, 0, 10),    new Date(2003, 12, 8), new Date(2004, 2, 19), new Date(2005, 7, 5),    new Date(2006, 9, 11), new Date(2007, 11, 21), new Date(2008, 1, 10)  ]}```Lastly, to constrain or offset division by count or interval use the optional timeExtent property.```js// Add yearly stops from Christmas 2019 to Christmas 2029 onlytimeSlider.viewModel.stops = {  interval: {    value: 1,    unit: "years"  },  timeExtent: {    start: new Date(2019, 11, 25),    end: new Date(2029, 11, 25)  }}// Likewise, add stops that represent quarters of 2019 only.timeSlider.viewModel.stops = {  count: 4,  timeExtent: {    start: new Date(2019, 0, 1),    end: new Date(2020, 0, 1)  }}```
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#stops)
     *
     * @default { count : 10 }
     */
    stops?: StopsByDates | StopsByCount | StopsByInterval;
    /**
     * The user defined time extent. Values define the current location of time sliderthumbs. The "time-window" [mode](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#mode) has two values, the other modes only have one.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#values)
     *
     * @default null
     */
    values?: DateProperties[];
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).If this property is set, the TimeSlider widget will update the view's timeExtentproperty whenever the time slider is manipulated or updated programmatically. This property will affectany time-aware layer in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
  }

  /**
   * Specifies number of stops for the time slider widget. The time slider stops are divided intoevenly spaced stops.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#StopsByCount)
   */
  export interface StopsByCount extends Object {
    /**
     * Specifies number of stops count.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#StopsByCount)
     */
    count: number;
    /**
     * A period of time with definitive start and end dates. The time slider widget's [fullTimeExtent](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#fullTimeExtent) will be used if this property is not specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#StopsByCount)
     */
    timeExtent?: TimeExtent;
  }

  /**
   * Specifies an array of dates for the time slider widget. Can be used to create irregularly spaced stops.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#StopsByDates)
   */
  export interface StopsByDates extends Object {
    /**
     * Array of dates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#StopsByDates)
     */
    dates: Date[];
  }

  /**
   * Defines regularly spaced stops on the time slider from a [TimeInterval](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeInterval.html). The optional[TimeExtent](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html) can confine the subdivision to a specific time frame. StopByInterval is usefulwhen the spacing is in terms of months and years, which cannot be reliably expressed in milliseconds.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#StopsByInterval)
   */
  export interface StopsByInterval extends Object {
    /**
     * Specifies a granularity of temporal data and allows you to visualize the data at specified intervals. It can be set at regular interval such as every hour or every day.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#StopsByInterval)
     */
    interval: TimeInterval;
    /**
     * A period of time with definitive start and end dates. The time slider widget's [fullTimeExtent](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#fullTimeExtent) will be used if this property is not specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#StopsByInterval)
     */
    timeExtent?: TimeExtent;
  }

  interface Track extends Widget, GoTo {
    /**
     * The HTML5 Geolocation Position options for locating. Refer to[Geolocation API Specification](http://www.w3.org/TR/geolocation-API/#position-options)for details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#geolocationOptions)
     *
     * @default { maximumAge: 0, timeout: 15000, enableHighAccuracy: true }
     */
    geolocationOptions: any;
    /**
     * Indicates whether the widget will automatically navigate the view to the user's positionwhen a geolocation result is found. Set to `false` to disable this behavior,leaving full control to the developer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#goToLocationEnabled)
     *
     * @default true
     */
    goToLocationEnabled: boolean;
    /**
     * The graphic used to show the user's location in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#graphic)
     */
    graphic: Graphic;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#iconClass)
     */
    iconClass: string;
    /**
     * Indicates the scale to set on the view when navigating to the position of the geolocatedresult once a location is returned from the [track](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#event-track) event.If a scale value is not explicitly set, then the view will navigate to a default scale of `2500`.For 2D views the value should be within the [effectiveMinScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)and [effectiveMaxScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#scale)
     *
     * @default null
     */
    scale: number;
    /**
     * Indicates whether the widget is watching for new positions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#tracking)
     *
     * @default false
     */
    readonly tracking: boolean;
    /**
     * Indicates whether the widget will automatically [rotate to user's direction](https://www.w3.org/TR/geolocation-API/#coordinates_interface).Set to `false` to disable this behavior.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#useHeadingEnabled)
     *
     * @default true
     */
    useHeadingEnabled: boolean;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[TrackViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track-TrackViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#viewModel)
     */
    viewModel: TrackViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#render)
     *
     *
     */
    render(): any;
    /**
     * When executed, the widget will start [tracking](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#tracking) theuser's location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#start)
     *
     *
     */
    start(): void;
    /**
     * Stops tracking the user's location when executed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#stop)
     *
     *
     */
    stop(): void;
  }

  interface TrackConstructor {
    new (properties?: TrackProperties): Track;
  }

  export const Track: TrackConstructor;

  interface TrackProperties extends WidgetProperties, GoToProperties {
    /**
     * The HTML5 Geolocation Position options for locating. Refer to[Geolocation API Specification](http://www.w3.org/TR/geolocation-API/#position-options)for details.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#geolocationOptions)
     *
     * @default { maximumAge: 0, timeout: 15000, enableHighAccuracy: true }
     */
    geolocationOptions?: any;
    /**
     * Indicates whether the widget will automatically navigate the view to the user's positionwhen a geolocation result is found. Set to `false` to disable this behavior,leaving full control to the developer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#goToLocationEnabled)
     *
     * @default true
     */
    goToLocationEnabled?: boolean;
    /**
     * The graphic used to show the user's location in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#graphic)
     */
    graphic?: GraphicProperties;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#iconClass)
     */
    iconClass?: string;
    /**
     * Indicates the scale to set on the view when navigating to the position of the geolocatedresult once a location is returned from the [track](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#event-track) event.If a scale value is not explicitly set, then the view will navigate to a default scale of `2500`.For 2D views the value should be within the [effectiveMinScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)and [effectiveMaxScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#scale)
     *
     * @default null
     */
    scale?: number;
    /**
     * Indicates whether the widget will automatically [rotate to user's direction](https://www.w3.org/TR/geolocation-API/#coordinates_interface).Set to `false` to disable this behavior.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#useHeadingEnabled)
     *
     * @default true
     */
    useHeadingEnabled?: boolean;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[TrackViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track-TrackViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#viewModel)
     */
    viewModel?: TrackViewModelProperties;
  }

  interface TrackViewModel extends Accessor, Evented, GeolocationPositioning, GoTo {
    /**
     * The current state of the widget.**Possible Values:** disabled | ready | tracking | waiting
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track-TrackViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * Indicates whether new positions are being watched.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track-TrackViewModel.html#tracking)
     *
     * @default false
     */
    readonly tracking: boolean;

    /**
     * When executed, [tracking](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track-TrackViewModel.html#tracking) starts at theuser's location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track-TrackViewModel.html#start)
     *
     *
     */
    start(): void;
    /**
     * Stops tracking the user's location when executed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track-TrackViewModel.html#stop)
     *
     *
     */
    stop(): void;
  }

  interface TrackViewModelConstructor {
    new (properties?: TrackViewModelProperties): TrackViewModel;
  }

  export const TrackViewModel: TrackViewModelConstructor;

  interface TrackViewModelProperties extends GeolocationPositioningProperties, GoToProperties {}

  interface Widget extends Accessor, Evented {
    /**
     * The ID or node representing the DOM element containing the widget.This property can only be set once.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#container)
     */
    container: string | HTMLElement;
    /**
     * When `true`, this property indicates whether the widget has been destroyed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#destroyed)
     */
    destroyed: boolean;
    /**
     * The unique ID assigned to the widget when the widget is created.If not set by the developer, it will default to the container ID,or if that is not present then it will be automatically generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#id)
     */
    id: string;
    /**
     * The widget's label.This property is useful whenever the widget is controlled by another one (e.g. [Expand](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html))
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#label)
     */
    label: string;

    /**
     * A utility method used for building the value for a widget's `class` property.This aids in simplifying CSS class setup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#classes)
     *
     * @param classNames The class names.
     *
     */
    classes(...classNames: (string | string[] | any)[]): string;
    /**
     * Destroys the widget instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#destroy)
     *
     *
     */
    destroy(): void;
    /**
     * Widget teardown helper. Any handles added to it will be automatically removed when the widget is destroyed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#own)
     *
     * @param handles Handles marked for removal once the widget is destroyed.
     *
     */
    own(handles: WatchHandle | WatchHandle[]): void;
    /**
     * *This method is primarily used by developers when implementing custom widgets.*Executes after widget is ready for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#postInitialize)
     *
     *
     */
    postInitialize(): void;
    /**
     * Renders widget to the DOM immediately.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#renderNow)
     *
     *
     */
    renderNow(): void;
    /**
     * *This method is primarily used by developers when implementing custom widgets.*Schedules widget rendering. This method is useful for changes affecting the UI.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#scheduleRender)
     *
     *
     */
    scheduleRender(): void;
  }

  interface WidgetConstructor {
    new (properties?: WidgetProperties): Widget;
  }

  export const Widget: WidgetConstructor;

  interface WidgetProperties {
    /**
     * The ID or node representing the DOM element containing the widget.This property can only be set once.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#container)
     */
    container?: string | HTMLElement;
    /**
     * When `true`, this property indicates whether the widget has been destroyed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#destroyed)
     */
    destroyed?: boolean;
    /**
     * The unique ID assigned to the widget when the widget is created.If not set by the developer, it will default to the container ID,or if that is not present then it will be automatically generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#id)
     */
    id?: string;
    /**
     * The widget's label.This property is useful whenever the widget is controlled by another one (e.g. [Expand](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html))
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#label)
     */
    label?: string;
  }

  interface Widgette {
    /**
     * The ID or node representing the DOM element containing the widget.Note that once set, this property cannot be modified afterwards.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widgette.html#container)
     */
    container: string | HTMLElement;
    /**
     * Indicates whether the widget is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widgette.html#visible)
     *
     * @default true
     */
    visible: boolean;

    /**
     * Destroys the widget instance. Call this method when the widget is no longerneeded by the application.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widgette.html#destroy)
     *
     *
     */
    destroy(): void;
    /**
     * Registers an event handler on the widget instance. Call this method to hook anevent with a listener. See the [Events summary table](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widgette.html#events-summary) for a listof supported events.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widgette.html#on)
     *
     * @param type The name of the event.
     * @param listener The function to call when the event is fired.
     *
     */
    on(type: string, listener: Function): any;
  }

  interface WidgetteConstructor {
    new (): Widgette;
  }

  export const Widgette: WidgetteConstructor;

  interface Zoom extends Widget {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html#iconClass)
     */
    iconClass: string;
    /**
     * Determines the layout/orientation of the Zoom widget.**Possible Values:** vertical | horizontal
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html#layout)
     *
     * @default vertical
     */
    layout: string;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[ZoomViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom-ZoomViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html#viewModel)
     */
    viewModel: ZoomViewModel;

    /**
     * *This method is primarily used by developers when implementing custom widgets.*It must be implemented by subclasses for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html#render)
     *
     *
     */
    render(): any;
    /**
     * Zooms the view in by an LOD factor of 0.5.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html#zoomIn)
     *
     *
     */
    zoomIn(): void;
    /**
     * Zooms the view out by an LOD factor of 2.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html#zoomOut)
     *
     *
     */
    zoomOut(): void;
  }

  interface ZoomConstructor {
    new (properties?: ZoomProperties): Zoom;
  }

  export const Zoom: ZoomConstructor;

  interface ZoomProperties extends WidgetProperties {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html#iconClass)
     */
    iconClass?: string;
    /**
     * Determines the layout/orientation of the Zoom widget.**Possible Values:** vertical | horizontal
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html#layout)
     *
     * @default vertical
     */
    layout?: string;
    /**
     * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). Set this to link the widget to a specific view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
    /**
     * The view model for this widget. This is a class that contains all the logic(properties and methods) that controls this widget's behavior. See the[ZoomViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom-ZoomViewModel.html) class to accessall properties and methods on the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html#viewModel)
     */
    viewModel?: ZoomViewModelProperties;
  }

  interface ZoomViewModel extends Accessor {
    /**
     * Indicates if the view can zoom in.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom-ZoomViewModel.html#canZoomIn)
     */
    canZoomIn: boolean;
    /**
     * Indicates if the view can zoom out.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom-ZoomViewModel.html#canZoomOut)
     */
    canZoomOut: boolean;
    /**
     * The current state of the widget.**Possible Values:** disabled | ready
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom-ZoomViewModel.html#state)
     *
     * @default disabled
     */
    readonly state: string;
    /**
     * The view from which to operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom-ZoomViewModel.html#view)
     */
    view: MapView | SceneView;

    /**
     * Zooms the view in by an LOD factor of 0.5.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom-ZoomViewModel.html#zoomIn)
     *
     *
     */
    zoomIn(): void;
    /**
     * Zooms the view out by an LOD factor of 2.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom-ZoomViewModel.html#zoomOut)
     *
     *
     */
    zoomOut(): void;
  }

  interface ZoomViewModelConstructor {
    new (properties?: ZoomViewModelProperties): ZoomViewModel;
  }

  export const ZoomViewModel: ZoomViewModelConstructor;

  interface ZoomViewModelProperties {
    /**
     * Indicates if the view can zoom in.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom-ZoomViewModel.html#canZoomIn)
     */
    canZoomIn?: boolean;
    /**
     * Indicates if the view can zoom out.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom-ZoomViewModel.html#canZoomOut)
     */
    canZoomOut?: boolean;
    /**
     * The view from which to operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom-ZoomViewModel.html#view)
     */
    view?: MapViewProperties | SceneViewProperties;
  }

  export type OpacitySliderMaxChangeEventHandler = (event: OpacitySliderMaxChangeEvent) => void;

  export type OpacitySliderMinChangeEventHandler = (event: OpacitySliderMinChangeEvent) => void;

  export type OpacitySliderThumbChangeEventHandler = (event: OpacitySliderThumbChangeEvent) => void;

  export type OpacitySliderThumbDragEventHandler = (event: OpacitySliderThumbDragEvent) => void;

  export type OpacitySliderViewModelMaxChangeEventHandler = (event: OpacitySliderViewModelMaxChangeEvent) => void;

  export type OpacitySliderViewModelMinChangeEventHandler = (event: OpacitySliderViewModelMinChangeEvent) => void;

  export type OpacitySliderViewModelValueChangeEventHandler = (event: OpacitySliderViewModelValueChangeEvent) => void;

  export type OpenStreetMapLayerLayerviewCreateErrorEventHandler = (
    event: OpenStreetMapLayerLayerviewCreateErrorEvent
  ) => void;

  export type OpenStreetMapLayerLayerviewCreateEventHandler = (event: OpenStreetMapLayerLayerviewCreateEvent) => void;

  export type OpenStreetMapLayerLayerviewDestroyEventHandler = (event: OpenStreetMapLayerLayerviewDestroyEvent) => void;

  export type PointCloudLayerLayerviewCreateErrorEventHandler = (
    event: PointCloudLayerLayerviewCreateErrorEvent
  ) => void;

  export type PointCloudLayerLayerviewCreateEventHandler = (event: PointCloudLayerLayerviewCreateEvent) => void;

  export type PointCloudLayerLayerviewDestroyEventHandler = (event: PointCloudLayerLayerviewDestroyEvent) => void;

  export type PopupViewModelTriggerActionEventHandler = (event: PopupViewModelTriggerActionEvent) => void;

  export type SceneLayerLayerviewCreateErrorEventHandler = (event: SceneLayerLayerviewCreateErrorEvent) => void;

  export type SceneLayerLayerviewCreateEventHandler = (event: SceneLayerLayerviewCreateEvent) => void;

  export type SceneLayerLayerviewDestroyEventHandler = (event: SceneLayerLayerviewDestroyEvent) => void;

  export type SceneViewBlurEventHandler = (event: SceneViewBlurEvent) => void;

  export type SceneViewClickEventHandler = (event: SceneViewClickEvent) => void;

  export type SceneViewDoubleClickEventHandler = (event: SceneViewDoubleClickEvent) => void;

  export type SceneViewDragEventHandler = (event: SceneViewDragEvent) => void;

  export type SceneViewFocusEventHandler = (event: SceneViewFocusEvent) => void;

  export type SceneViewHoldEventHandler = (event: SceneViewHoldEvent) => void;

  export type SceneViewImmediateClickEventHandler = (event: SceneViewImmediateClickEvent) => void;

  export type SceneViewKeyDownEventHandler = (event: SceneViewKeyDownEvent) => void;

  export type SceneViewKeyUpEventHandler = (event: SceneViewKeyUpEvent) => void;

  export type SceneViewLayerviewCreateErrorEventHandler = (event: SceneViewLayerviewCreateErrorEvent) => void;

  export type SceneViewLayerviewCreateEventHandler = (event: SceneViewLayerviewCreateEvent) => void;

  export type SceneViewLayerviewDestroyEventHandler = (event: SceneViewLayerviewDestroyEvent) => void;

  export type SceneViewMouseWheelEventHandler = (event: SceneViewMouseWheelEvent) => void;

  export type SceneViewPointerDownEventHandler = (event: SceneViewPointerDownEvent) => void;

  export type SceneViewPointerEnterEventHandler = (event: SceneViewPointerEnterEvent) => void;

  export type SceneViewPointerLeaveEventHandler = (event: SceneViewPointerLeaveEvent) => void;

  export type SceneViewPointerMoveEventHandler = (event: SceneViewPointerMoveEvent) => void;

  export type SceneViewPointerUpEventHandler = (event: SceneViewPointerUpEvent) => void;

  export type SceneViewResizeEventHandler = (event: SceneViewResizeEvent) => void;

  export type SearchViewModelSearchClearEventHandler = (event: SearchViewModelSearchClearEvent) => void;

  export type SearchViewModelSearchCompleteEventHandler = (event: SearchViewModelSearchCompleteEvent) => void;

  export type SearchViewModelSearchStartEventHandler = (event: SearchViewModelSearchStartEvent) => void;

  export type SearchViewModelSelectResultEventHandler = (event: SearchViewModelSelectResultEvent) => void;

  export type SearchViewModelSuggestCompleteEventHandler = (event: SearchViewModelSuggestCompleteEvent) => void;

  export type SearchViewModelSuggestStartEventHandler = (event: SearchViewModelSuggestStartEvent) => void;

  export type SizeSliderMaxChangeEventHandler = (event: SizeSliderMaxChangeEvent) => void;

  export type SizeSliderMinChangeEventHandler = (event: SizeSliderMinChangeEvent) => void;

  export type SizeSliderThumbChangeEventHandler = (event: SizeSliderThumbChangeEvent) => void;

  export type SizeSliderThumbDragEventHandler = (event: SizeSliderThumbDragEvent) => void;

  export type SizeSliderViewModelMaxChangeEventHandler = (event: SizeSliderViewModelMaxChangeEvent) => void;

  export type SizeSliderViewModelMinChangeEventHandler = (event: SizeSliderViewModelMinChangeEvent) => void;

  export type SizeSliderViewModelValueChangeEventHandler = (event: SizeSliderViewModelValueChangeEvent) => void;

  export type StreamLayerEditsEventHandler = (event: StreamLayerEditsEvent) => void;

  export type StreamLayerLayerviewCreateErrorEventHandler = (event: StreamLayerLayerviewCreateErrorEvent) => void;

  export type StreamLayerLayerviewCreateEventHandler = (event: StreamLayerLayerviewCreateEvent) => void;

  export type StreamLayerLayerviewDestroyEventHandler = (event: StreamLayerLayerviewDestroyEvent) => void;

  export type StreamLayerViewDataReceivedEventHandler = (event: StreamLayerViewDataReceivedEvent) => void;

  export type TileLayerLayerviewCreateErrorEventHandler = (event: TileLayerLayerviewCreateErrorEvent) => void;

  export type TileLayerLayerviewCreateEventHandler = (event: TileLayerLayerviewCreateEvent) => void;

  export type TileLayerLayerviewDestroyEventHandler = (event: TileLayerLayerviewDestroyEvent) => void;

  export type UnknownLayerLayerviewCreateErrorEventHandler = (event: UnknownLayerLayerviewCreateErrorEvent) => void;

  export type UnknownLayerLayerviewCreateEventHandler = (event: UnknownLayerLayerviewCreateEvent) => void;

  export type UnknownLayerLayerviewDestroyEventHandler = (event: UnknownLayerLayerviewDestroyEvent) => void;

  export type UnsupportedLayerLayerviewCreateErrorEventHandler = (
    event: UnsupportedLayerLayerviewCreateErrorEvent
  ) => void;

  export type UnsupportedLayerLayerviewCreateEventHandler = (event: UnsupportedLayerLayerviewCreateEvent) => void;

  export type UnsupportedLayerLayerviewDestroyEventHandler = (event: UnsupportedLayerLayerviewDestroyEvent) => void;

  export type VectorTileLayerLayerviewCreateErrorEventHandler = (
    event: VectorTileLayerLayerviewCreateErrorEvent
  ) => void;

  export type VectorTileLayerLayerviewCreateEventHandler = (event: VectorTileLayerLayerviewCreateEvent) => void;

  export type VectorTileLayerLayerviewDestroyEventHandler = (event: VectorTileLayerLayerviewDestroyEvent) => void;

  export type WebTileLayerLayerviewCreateErrorEventHandler = (event: WebTileLayerLayerviewCreateErrorEvent) => void;

  export type WebTileLayerLayerviewCreateEventHandler = (event: WebTileLayerLayerviewCreateEvent) => void;

  export type WebTileLayerLayerviewDestroyEventHandler = (event: WebTileLayerLayerviewDestroyEvent) => void;

  export type WMSLayerLayerviewCreateErrorEventHandler = (event: WMSLayerLayerviewCreateErrorEvent) => void;

  export type WMSLayerLayerviewCreateEventHandler = (event: WMSLayerLayerviewCreateEvent) => void;

  export type WMSLayerLayerviewDestroyEventHandler = (event: WMSLayerLayerviewDestroyEvent) => void;

  export type WMTSLayerLayerviewCreateErrorEventHandler = (event: WMTSLayerLayerviewCreateErrorEvent) => void;

  export type WMTSLayerLayerviewCreateEventHandler = (event: WMTSLayerLayerviewCreateEvent) => void;

  export type WMTSLayerLayerviewDestroyEventHandler = (event: WMTSLayerLayerviewDestroyEvent) => void;
}

declare module "esri/Basemap" {
  import Basemap = __esri.Basemap;
  export = Basemap;
}

declare module "esri/Camera" {
  import Camera = __esri.Camera;
  export = Camera;
}

declare module "esri/Color" {
  import Color = __esri.Color;
  export = Color;
}

declare module "esri/Graphic" {
  import Graphic = __esri.Graphic;
  export = Graphic;
}

declare module "esri/Ground" {
  import Ground = __esri.Ground;
  export = Ground;
}

declare module "esri/Map" {
  import Map = __esri.Map;
  export = Map;
}

declare module "esri/PopupTemplate" {
  import PopupTemplate = __esri.PopupTemplate;
  export = PopupTemplate;
}

declare module "esri/TimeExtent" {
  import TimeExtent = __esri.TimeExtent;
  export = TimeExtent;
}

declare module "esri/TimeInterval" {
  import TimeInterval = __esri.TimeInterval;
  export = TimeInterval;
}

declare module "esri/Viewpoint" {
  import Viewpoint = __esri.Viewpoint;
  export = Viewpoint;
}

declare module "esri/WebMap" {
  import WebMap = __esri.WebMap;
  export = WebMap;
}

declare module "esri/WebScene" {
  import WebScene = __esri.WebScene;
  export = WebScene;
}

declare module "esri/core/Accessor" {
  import Accessor = __esri.Accessor;
  export = Accessor;
}

declare module "esri/core/Collection" {
  import Collection = __esri.Collection;
  export = Collection;
}

declare module "esri/core/Error" {
  import Error = __esri.Error;
  export = Error;
}

declare module "esri/core/Handles" {
  import Handles = __esri.Handles;
  export = Handles;
}

declare module "esri/core/HandleOwner" {
  import HandleOwner = __esri.HandleOwner;
  export = HandleOwner;
}

declare module "esri/core/workers/Connection" {
  import Connection = __esri.Connection;
  export = Connection;
}

declare module "esri/geometry/Circle" {
  import Circle = __esri.Circle;
  export = Circle;
}

declare module "esri/geometry/Extent" {
  import Extent = __esri.Extent;
  export = Extent;
}

declare module "esri/geometry/Geometry" {
  import Geometry = __esri.Geometry;
  export = Geometry;
}

declare module "esri/geometry/HeightModelInfo" {
  import HeightModelInfo = __esri.HeightModelInfo;
  export = HeightModelInfo;
}

declare module "esri/geometry/Mesh" {
  import Mesh = __esri.Mesh;
  export = Mesh;
}

declare module "esri/geometry/Multipoint" {
  import Multipoint = __esri.Multipoint;
  export = Multipoint;
}

declare module "esri/geometry/Point" {
  import Point = __esri.Point;
  export = Point;
}

declare module "esri/geometry/Polygon" {
  import Polygon = __esri.Polygon;
  export = Polygon;
}

declare module "esri/geometry/Polyline" {
  import Polyline = __esri.Polyline;
  export = Polyline;
}

declare module "esri/geometry/SpatialReference" {
  import SpatialReference = __esri.SpatialReference;
  export = SpatialReference;
}

declare module "esri/geometry/support/GeographicTransformation" {
  import GeographicTransformation = __esri.GeographicTransformation;
  export = GeographicTransformation;
}

declare module "esri/geometry/support/GeographicTransformationStep" {
  import GeographicTransformationStep = __esri.GeographicTransformationStep;
  export = GeographicTransformationStep;
}

declare module "esri/geometry/support/MeshComponent" {
  import MeshComponent = __esri.MeshComponent;
  export = MeshComponent;
}

declare module "esri/geometry/support/MeshMaterial" {
  import MeshMaterial = __esri.MeshMaterial;
  export = MeshMaterial;
}

declare module "esri/geometry/support/MeshTexture" {
  import MeshTexture = __esri.MeshTexture;
  export = MeshTexture;
}

declare module "esri/geometry/support/ValueMeshColor" {
  import ValueMeshColor = __esri.ValueMeshColor;
  export = ValueMeshColor;
}

declare module "esri/geometry/support/ImageMeshColor" {
  import ImageMeshColor = __esri.ImageMeshColor;
  export = ImageMeshColor;
}

declare module "esri/identity/Credential" {
  import Credential = __esri.Credential;
  export = Credential;
}

declare module "esri/identity/IdentityManager" {
  const IdentityManager: __esri.IdentityManager;
  export = IdentityManager;
}

declare module "esri/identity/OAuthInfo" {
  import OAuthInfo = __esri.OAuthInfo;
  export = OAuthInfo;
}

declare module "esri/identity/ServerInfo" {
  import ServerInfo = __esri.ServerInfo;
  export = ServerInfo;
}

declare module "esri/layers/BaseElevationLayer" {
  import BaseElevationLayer = __esri.BaseElevationLayer;
  export = BaseElevationLayer;
}

declare module "esri/layers/BuildingSceneLayer" {
  import BuildingSceneLayer = __esri.BuildingSceneLayer;
  export = BuildingSceneLayer;
}

declare module "esri/layers/BingMapsLayer" {
  import BingMapsLayer = __esri.BingMapsLayer;
  export = BingMapsLayer;
}

declare module "esri/layers/CSVLayer" {
  import CSVLayer = __esri.CSVLayer;
  export = CSVLayer;
}

declare module "esri/layers/ElevationLayer" {
  import ElevationLayer = __esri.ElevationLayer;
  export = ElevationLayer;
}

declare module "esri/layers/FeatureLayer" {
  import FeatureLayer = __esri.FeatureLayer;
  export = FeatureLayer;
}

declare module "esri/layers/GeoJSONLayer" {
  import GeoJSONLayer = __esri.GeoJSONLayer;
  export = GeoJSONLayer;
}

declare module "esri/layers/GeoRSSLayer" {
  import GeoRSSLayer = __esri.GeoRSSLayer;
  export = GeoRSSLayer;
}

declare module "esri/layers/GraphicsLayer" {
  import GraphicsLayer = __esri.GraphicsLayer;
  export = GraphicsLayer;
}

declare module "esri/layers/GroupLayer" {
  import GroupLayer = __esri.GroupLayer;
  export = GroupLayer;
}

declare module "esri/layers/ImageryLayer" {
  import ImageryLayer = __esri.ImageryLayer;
  export = ImageryLayer;
}

declare module "esri/layers/IntegratedMeshLayer" {
  import IntegratedMeshLayer = __esri.IntegratedMeshLayer;
  export = IntegratedMeshLayer;
}

declare module "esri/layers/KMLLayer" {
  import KMLLayer = __esri.KMLLayer;
  export = KMLLayer;
}

declare module "esri/layers/Layer" {
  import Layer = __esri.Layer;
  export = Layer;
}

declare module "esri/layers/MapImageLayer" {
  import MapImageLayer = __esri.MapImageLayer;
  export = MapImageLayer;
}

declare module "esri/layers/MapNotesLayer" {
  import MapNotesLayer = __esri.MapNotesLayer;
  export = MapNotesLayer;
}

declare module "esri/layers/OpenStreetMapLayer" {
  import OpenStreetMapLayer = __esri.OpenStreetMapLayer;
  export = OpenStreetMapLayer;
}

declare module "esri/layers/PointCloudLayer" {
  import PointCloudLayer = __esri.PointCloudLayer;
  export = PointCloudLayer;
}

declare module "esri/layers/SceneLayer" {
  import SceneLayer = __esri.SceneLayer;
  export = SceneLayer;
}

declare module "esri/layers/StreamLayer" {
  import StreamLayer = __esri.StreamLayer;
  export = StreamLayer;
}

declare module "esri/layers/TileLayer" {
  import TileLayer = __esri.TileLayer;
  export = TileLayer;
}

declare module "esri/layers/UnknownLayer" {
  import UnknownLayer = __esri.UnknownLayer;
  export = UnknownLayer;
}

declare module "esri/layers/UnsupportedLayer" {
  import UnsupportedLayer = __esri.UnsupportedLayer;
  export = UnsupportedLayer;
}

declare module "esri/layers/VectorTileLayer" {
  import VectorTileLayer = __esri.VectorTileLayer;
  export = VectorTileLayer;
}

declare module "esri/layers/WebTileLayer" {
  import WebTileLayer = __esri.WebTileLayer;
  export = WebTileLayer;
}

declare module "esri/layers/WMSLayer" {
  import WMSLayer = __esri.WMSLayer;
  export = WMSLayer;
}

declare module "esri/layers/WMTSLayer" {
  import WMTSLayer = __esri.WMTSLayer;
  export = WMTSLayer;
}

declare module "esri/layers/BaseDynamicLayer" {
  import BaseDynamicLayer = __esri.BaseDynamicLayer;
  export = BaseDynamicLayer;
}

declare module "esri/layers/BaseTileLayer" {
  import BaseTileLayer = __esri.BaseTileLayer;
  export = BaseTileLayer;
}

declare module "esri/layers/buildingSublayers/BuildingComponentSublayer" {
  import BuildingComponentSublayer = __esri.BuildingComponentSublayer;
  export = BuildingComponentSublayer;
}

declare module "esri/layers/buildingSublayers/BuildingGroupSublayer" {
  import BuildingGroupSublayer = __esri.BuildingGroupSublayer;
  export = BuildingGroupSublayer;
}

declare module "esri/layers/buildingSublayers/BuildingSublayer" {
  import BuildingSublayer = __esri.BuildingSublayer;
  export = BuildingSublayer;
}

declare module "esri/layers/pointCloudFilters/PointCloudFilter" {
  import PointCloudFilter = __esri.PointCloudFilter;
  export = PointCloudFilter;
}

declare module "esri/layers/pointCloudFilters/PointCloudValueFilter" {
  import PointCloudValueFilter = __esri.PointCloudValueFilter;
  export = PointCloudValueFilter;
}

declare module "esri/layers/pointCloudFilters/PointCloudReturnFilter" {
  import PointCloudReturnFilter = __esri.PointCloudReturnFilter;
  export = PointCloudReturnFilter;
}

declare module "esri/layers/support/AttachmentInfo" {
  import AttachmentInfo = __esri.AttachmentInfo;
  export = AttachmentInfo;
}

declare module "esri/layers/support/BuildingFilter" {
  import BuildingFilter = __esri.BuildingFilter;
  export = BuildingFilter;
}

declare module "esri/layers/support/CodedValueDomain" {
  import CodedValueDomain = __esri.CodedValueDomain;
  export = CodedValueDomain;
}

declare module "esri/layers/support/DimensionalDefinition" {
  import DimensionalDefinition = __esri.DimensionalDefinition;
  export = DimensionalDefinition;
}

declare module "esri/layers/support/Domain" {
  import Domain = __esri.Domain;
  export = Domain;
}

declare module "esri/layers/support/ElevationSampler" {
  import ElevationSampler = __esri.ElevationSampler;
  export = ElevationSampler;
}

declare module "esri/layers/support/Field" {
  import Field = __esri.Field;
  export = Field;
}

declare module "esri/layers/support/FieldsIndex" {
  import FieldsIndex = __esri.FieldsIndex;
  export = FieldsIndex;
}

declare module "esri/layers/support/FeatureTemplate" {
  import FeatureTemplate = __esri.FeatureTemplate;
  export = FeatureTemplate;
}

declare module "esri/layers/support/FeatureType" {
  import FeatureType = __esri.FeatureType;
  export = FeatureType;
}

declare module "esri/layers/support/ImageParameters" {
  import ImageParameters = __esri.ImageParameters;
  export = ImageParameters;
}

declare module "esri/layers/support/InheritedDomain" {
  import InheritedDomain = __esri.InheritedDomain;
  export = InheritedDomain;
}

declare module "esri/layers/support/KMLSublayer" {
  import KMLSublayer = __esri.KMLSublayer;
  export = KMLSublayer;
}

declare module "esri/layers/support/LabelClass" {
  import LabelClass = __esri.LabelClass;
  export = LabelClass;
}

declare module "esri/layers/support/LOD" {
  import LOD = __esri.LOD;
  export = LOD;
}

declare module "esri/layers/support/MapImage" {
  import MapImage = __esri.MapImage;
  export = MapImage;
}

declare module "esri/layers/support/MosaicRule" {
  import MosaicRule = __esri.MosaicRule;
  export = MosaicRule;
}

declare module "esri/layers/support/PixelBlock" {
  import PixelBlock = __esri.PixelBlock;
  export = PixelBlock;
}

declare module "esri/layers/support/RangeDomain" {
  import RangeDomain = __esri.RangeDomain;
  export = RangeDomain;
}

declare module "esri/layers/support/RasterFunction" {
  import RasterFunction = __esri.RasterFunction;
  export = RasterFunction;
}

declare module "esri/layers/support/RasterInfo" {
  import RasterInfo = __esri.RasterInfo;
  export = RasterInfo;
}

declare module "esri/layers/support/Relationship" {
  import Relationship = __esri.Relationship;
  export = Relationship;
}

declare module "esri/layers/support/Sublayer" {
  import Sublayer = __esri.Sublayer;
  export = Sublayer;
}

declare module "esri/layers/support/TileInfo" {
  import TileInfo = __esri.TileInfo;
  export = TileInfo;
}

declare module "esri/layers/support/TileMatrixSet" {
  import TileMatrixSet = __esri.TileMatrixSet;
  export = TileMatrixSet;
}

declare module "esri/layers/support/TimeInfo" {
  import TimeInfo = __esri.TimeInfo;
  export = TimeInfo;
}

declare module "esri/layers/support/WMSSublayer" {
  import WMSSublayer = __esri.WMSSublayer;
  export = WMSSublayer;
}

declare module "esri/layers/support/WMTSStyle" {
  import WMTSStyle = __esri.WMTSStyle;
  export = WMTSStyle;
}

declare module "esri/layers/support/WMTSSublayer" {
  import WMTSSublayer = __esri.WMTSSublayer;
  export = WMTSSublayer;
}

declare module "esri/portal/Portal" {
  import Portal = __esri.Portal;
  export = Portal;
}

declare module "esri/portal/PortalFolder" {
  import PortalFolder = __esri.PortalFolder;
  export = PortalFolder;
}

declare module "esri/portal/PortalGroup" {
  import PortalGroup = __esri.PortalGroup;
  export = PortalGroup;
}

declare module "esri/portal/PortalItem" {
  import PortalItem = __esri.PortalItem;
  export = PortalItem;
}

declare module "esri/portal/PortalRating" {
  import PortalRating = __esri.PortalRating;
  export = PortalRating;
}

declare module "esri/portal/PortalQueryParams" {
  import PortalQueryParams = __esri.PortalQueryParams;
  export = PortalQueryParams;
}

declare module "esri/portal/PortalQueryResult" {
  import PortalQueryResult = __esri.PortalQueryResult;
  export = PortalQueryResult;
}

declare module "esri/portal/PortalUser" {
  import PortalUser = __esri.PortalUser;
  export = PortalUser;
}

declare module "esri/renderers/ClassBreaksRenderer" {
  import ClassBreaksRenderer = __esri.ClassBreaksRenderer;
  export = ClassBreaksRenderer;
}

declare module "esri/renderers/DotDensityRenderer" {
  import DotDensityRenderer = __esri.DotDensityRenderer;
  export = DotDensityRenderer;
}

declare module "esri/renderers/HeatmapRenderer" {
  import HeatmapRenderer = __esri.HeatmapRenderer;
  export = HeatmapRenderer;
}

declare module "esri/renderers/Renderer" {
  import Renderer = __esri.Renderer;
  export = Renderer;
}

declare module "esri/renderers/SimpleRenderer" {
  import SimpleRenderer = __esri.SimpleRenderer;
  export = SimpleRenderer;
}

declare module "esri/renderers/UniqueValueRenderer" {
  import UniqueValueRenderer = __esri.UniqueValueRenderer;
  export = UniqueValueRenderer;
}

declare module "esri/renderers/StretchRenderer" {
  import StretchRenderer = __esri.StretchRenderer;
  export = StretchRenderer;
}

declare module "esri/renderers/PointCloudRenderer" {
  import PointCloudRenderer = __esri.PointCloudRenderer;
  export = PointCloudRenderer;
}

declare module "esri/renderers/PointCloudClassBreaksRenderer" {
  import PointCloudClassBreaksRenderer = __esri.PointCloudClassBreaksRenderer;
  export = PointCloudClassBreaksRenderer;
}

declare module "esri/renderers/PointCloudRGBRenderer" {
  import PointCloudRGBRenderer = __esri.PointCloudRGBRenderer;
  export = PointCloudRGBRenderer;
}

declare module "esri/renderers/PointCloudStretchRenderer" {
  import PointCloudStretchRenderer = __esri.PointCloudStretchRenderer;
  export = PointCloudStretchRenderer;
}

declare module "esri/renderers/PointCloudUniqueValueRenderer" {
  import PointCloudUniqueValueRenderer = __esri.PointCloudUniqueValueRenderer;
  export = PointCloudUniqueValueRenderer;
}

declare module "esri/renderers/support/AttributeColorInfo" {
  import AttributeColorInfo = __esri.AttributeColorInfo;
  export = AttributeColorInfo;
}

declare module "esri/renderers/support/AuthoringInfo" {
  import AuthoringInfo = __esri.AuthoringInfo;
  export = AuthoringInfo;
}

declare module "esri/renderers/support/AuthoringInfoVisualVariable" {
  import AuthoringInfoVisualVariable = __esri.AuthoringInfoVisualVariable;
  export = AuthoringInfoVisualVariable;
}

declare module "esri/renderers/support/ClassBreakInfo" {
  import ClassBreakInfo = __esri.ClassBreakInfo;
  export = ClassBreakInfo;
}

declare module "esri/renderers/support/HeatmapColorStop" {
  import HeatmapColorStop = __esri.HeatmapColorStop;
  export = HeatmapColorStop;
}

declare module "esri/renderers/support/UniqueValueInfo" {
  import UniqueValueInfo = __esri.UniqueValueInfo;
  export = UniqueValueInfo;
}

declare module "esri/renderers/visualVariables/ColorVariable" {
  import ColorVariable = __esri.ColorVariable;
  export = ColorVariable;
}

declare module "esri/renderers/visualVariables/OpacityVariable" {
  import OpacityVariable = __esri.OpacityVariable;
  export = OpacityVariable;
}

declare module "esri/renderers/visualVariables/RotationVariable" {
  import RotationVariable = __esri.RotationVariable;
  export = RotationVariable;
}

declare module "esri/renderers/visualVariables/SizeVariable" {
  import SizeVariable = __esri.SizeVariable;
  export = SizeVariable;
}

declare module "esri/renderers/visualVariables/VisualVariable" {
  import VisualVariable = __esri.VisualVariable;
  export = VisualVariable;
}

declare module "esri/renderers/visualVariables/support/ColorStop" {
  import ColorStop = __esri.ColorStop;
  export = ColorStop;
}

declare module "esri/renderers/visualVariables/support/OpacityStop" {
  import OpacityStop = __esri.OpacityStop;
  export = OpacityStop;
}

declare module "esri/renderers/visualVariables/support/SizeStop" {
  import SizeStop = __esri.SizeStop;
  export = SizeStop;
}

declare module "esri/support/actions/ActionButton" {
  import ActionButton = __esri.ActionButton;
  export = ActionButton;
}

declare module "esri/support/actions/ActionToggle" {
  import ActionToggle = __esri.ActionToggle;
  export = ActionToggle;
}

declare module "esri/popup/ExpressionInfo" {
  import ExpressionInfo = __esri.ExpressionInfo;
  export = ExpressionInfo;
}

declare module "esri/popup/FieldInfo" {
  import FieldInfo = __esri.FieldInfo;
  export = FieldInfo;
}

declare module "esri/popup/LayerOptions" {
  import LayerOptions = __esri.LayerOptions;
  export = LayerOptions;
}

declare module "esri/popup/RelatedRecordsInfo" {
  import RelatedRecordsInfo = __esri.RelatedRecordsInfo;
  export = RelatedRecordsInfo;
}

declare module "esri/popup/content/AttachmentsContent" {
  import AttachmentsContent = __esri.AttachmentsContent;
  export = AttachmentsContent;
}

declare module "esri/popup/content/BarChartMediaInfo" {
  import BarChartMediaInfo = __esri.BarChartMediaInfo;
  export = BarChartMediaInfo;
}

declare module "esri/popup/content/ColumnChartMediaInfo" {
  import ColumnChartMediaInfo = __esri.ColumnChartMediaInfo;
  export = ColumnChartMediaInfo;
}

declare module "esri/popup/content/Content" {
  import Content = __esri.Content;
  export = Content;
}

declare module "esri/popup/content/FieldsContent" {
  import FieldsContent = __esri.FieldsContent;
  export = FieldsContent;
}

declare module "esri/popup/content/ImageMediaInfo" {
  import ImageMediaInfo = __esri.ImageMediaInfo;
  export = ImageMediaInfo;
}

declare module "esri/popup/content/MediaContent" {
  import MediaContent = __esri.MediaContent;
  export = MediaContent;
}

declare module "esri/popup/content/LineChartMediaInfo" {
  import LineChartMediaInfo = __esri.LineChartMediaInfo;
  export = LineChartMediaInfo;
}

declare module "esri/popup/content/PieChartMediaInfo" {
  import PieChartMediaInfo = __esri.PieChartMediaInfo;
  export = PieChartMediaInfo;
}

declare module "esri/popup/content/TextContent" {
  import TextContent = __esri.TextContent;
  export = TextContent;
}

declare module "esri/popup/content/support/ChartMediaInfoValue" {
  import ChartMediaInfoValue = __esri.ChartMediaInfoValue;
  export = ChartMediaInfoValue;
}

declare module "esri/popup/content/support/ChartMediaInfoValueSeries" {
  import ChartMediaInfoValueSeries = __esri.ChartMediaInfoValueSeries;
  export = ChartMediaInfoValueSeries;
}

declare module "esri/popup/content/support/ImageMediaInfoValue" {
  import ImageMediaInfoValue = __esri.ImageMediaInfoValue;
  export = ImageMediaInfoValue;
}

declare module "esri/popup/support/FieldInfoFormat" {
  import FieldInfoFormat = __esri.FieldInfoFormat;
  export = FieldInfoFormat;
}

declare module "esri/popup/support/RelatedRecordsInfoFieldOrder" {
  import RelatedRecordsInfoFieldOrder = __esri.RelatedRecordsInfoFieldOrder;
  export = RelatedRecordsInfoFieldOrder;
}

declare module "esri/symbols/CIMSymbol" {
  import CIMSymbol = __esri.CIMSymbol;
  export = CIMSymbol;
}

declare module "esri/symbols/ExtrudeSymbol3DLayer" {
  import ExtrudeSymbol3DLayer = __esri.ExtrudeSymbol3DLayer;
  export = ExtrudeSymbol3DLayer;
}

declare module "esri/symbols/FillSymbol" {
  import FillSymbol = __esri.FillSymbol;
  export = FillSymbol;
}

declare module "esri/symbols/FillSymbol3DLayer" {
  import FillSymbol3DLayer = __esri.FillSymbol3DLayer;
  export = FillSymbol3DLayer;
}

declare module "esri/symbols/Font" {
  import Font = __esri.Font;
  export = Font;
}

declare module "esri/symbols/IconSymbol3DLayer" {
  import IconSymbol3DLayer = __esri.IconSymbol3DLayer;
  export = IconSymbol3DLayer;
}

declare module "esri/symbols/LabelSymbol3D" {
  import LabelSymbol3D = __esri.LabelSymbol3D;
  export = LabelSymbol3D;
}

declare module "esri/symbols/LineSymbol" {
  import LineSymbol = __esri.LineSymbol;
  export = LineSymbol;
}

declare module "esri/symbols/LineSymbol3D" {
  import LineSymbol3D = __esri.LineSymbol3D;
  export = LineSymbol3D;
}

declare module "esri/symbols/LineSymbol3DLayer" {
  import LineSymbol3DLayer = __esri.LineSymbol3DLayer;
  export = LineSymbol3DLayer;
}

declare module "esri/symbols/MarkerSymbol" {
  import MarkerSymbol = __esri.MarkerSymbol;
  export = MarkerSymbol;
}

declare module "esri/symbols/MeshSymbol3D" {
  import MeshSymbol3D = __esri.MeshSymbol3D;
  export = MeshSymbol3D;
}

declare module "esri/symbols/ObjectSymbol3DLayer" {
  import ObjectSymbol3DLayer = __esri.ObjectSymbol3DLayer;
  export = ObjectSymbol3DLayer;
}

declare module "esri/symbols/PictureFillSymbol" {
  import PictureFillSymbol = __esri.PictureFillSymbol;
  export = PictureFillSymbol;
}

declare module "esri/symbols/PictureMarkerSymbol" {
  import PictureMarkerSymbol = __esri.PictureMarkerSymbol;
  export = PictureMarkerSymbol;
}

declare module "esri/symbols/PathSymbol3DLayer" {
  import PathSymbol3DLayer = __esri.PathSymbol3DLayer;
  export = PathSymbol3DLayer;
}

declare module "esri/symbols/PointSymbol3D" {
  import PointSymbol3D = __esri.PointSymbol3D;
  export = PointSymbol3D;
}

declare module "esri/symbols/PolygonSymbol3D" {
  import PolygonSymbol3D = __esri.PolygonSymbol3D;
  export = PolygonSymbol3D;
}

declare module "esri/symbols/SimpleFillSymbol" {
  import SimpleFillSymbol = __esri.SimpleFillSymbol;
  export = SimpleFillSymbol;
}

declare module "esri/symbols/SimpleLineSymbol" {
  import SimpleLineSymbol = __esri.SimpleLineSymbol;
  export = SimpleLineSymbol;
}

declare module "esri/symbols/SimpleMarkerSymbol" {
  import SimpleMarkerSymbol = __esri.SimpleMarkerSymbol;
  export = SimpleMarkerSymbol;
}

declare module "esri/symbols/Symbol" {
  import Symbol = __esri.Symbol;
  export = Symbol;
}

declare module "esri/symbols/Symbol3D" {
  import Symbol3D = __esri.Symbol3D;
  export = Symbol3D;
}

declare module "esri/symbols/Symbol3DLayer" {
  import Symbol3DLayer = __esri.Symbol3DLayer;
  export = Symbol3DLayer;
}

declare module "esri/symbols/TextSymbol" {
  import TextSymbol = __esri.TextSymbol;
  export = TextSymbol;
}

declare module "esri/symbols/TextSymbol3DLayer" {
  import TextSymbol3DLayer = __esri.TextSymbol3DLayer;
  export = TextSymbol3DLayer;
}

declare module "esri/symbols/WaterSymbol3DLayer" {
  import WaterSymbol3DLayer = __esri.WaterSymbol3DLayer;
  export = WaterSymbol3DLayer;
}

declare module "esri/symbols/WebStyleSymbol" {
  import WebStyleSymbol = __esri.WebStyleSymbol;
  export = WebStyleSymbol;
}

declare module "esri/symbols/callouts/Callout3D" {
  import Callout3D = __esri.Callout3D;
  export = Callout3D;
}

declare module "esri/symbols/callouts/LineCallout3D" {
  import LineCallout3D = __esri.LineCallout3D;
  export = LineCallout3D;
}

declare module "esri/symbols/edges/Edges3D" {
  import Edges3D = __esri.Edges3D;
  export = Edges3D;
}

declare module "esri/symbols/edges/SolidEdges3D" {
  import SolidEdges3D = __esri.SolidEdges3D;
  export = SolidEdges3D;
}

declare module "esri/symbols/edges/SketchEdges3D" {
  import SketchEdges3D = __esri.SketchEdges3D;
  export = SketchEdges3D;
}

declare module "esri/tasks/ClosestFacilityTask" {
  import ClosestFacilityTask = __esri.ClosestFacilityTask;
  export = ClosestFacilityTask;
}

declare module "esri/tasks/FindTask" {
  import FindTask = __esri.FindTask;
  export = FindTask;
}

declare module "esri/tasks/GeometryService" {
  import GeometryService = __esri.GeometryService;
  export = GeometryService;
}

declare module "esri/tasks/Geoprocessor" {
  import Geoprocessor = __esri.Geoprocessor;
  export = Geoprocessor;
}

declare module "esri/tasks/IdentifyTask" {
  import IdentifyTask = __esri.IdentifyTask;
  export = IdentifyTask;
}

declare module "esri/tasks/ImageServiceIdentifyTask" {
  import ImageServiceIdentifyTask = __esri.ImageServiceIdentifyTask;
  export = ImageServiceIdentifyTask;
}

declare module "esri/tasks/Locator" {
  import Locator = __esri.Locator;
  export = Locator;
}

declare module "esri/tasks/QueryTask" {
  import QueryTask = __esri.QueryTask;
  export = QueryTask;
}

declare module "esri/tasks/PrintTask" {
  import PrintTask = __esri.PrintTask;
  export = PrintTask;
}

declare module "esri/tasks/RouteTask" {
  import RouteTask = __esri.RouteTask;
  export = RouteTask;
}

declare module "esri/tasks/ServiceAreaTask" {
  import ServiceAreaTask = __esri.ServiceAreaTask;
  export = ServiceAreaTask;
}

declare module "esri/tasks/Task" {
  import Task = __esri.Task;
  export = Task;
}

declare module "esri/tasks/support/AddressCandidate" {
  import AddressCandidate = __esri.AddressCandidate;
  export = AddressCandidate;
}

declare module "esri/tasks/support/AlgorithmicColorRamp" {
  import AlgorithmicColorRamp = __esri.AlgorithmicColorRamp;
  export = AlgorithmicColorRamp;
}

declare module "esri/tasks/support/AreasAndLengthsParameters" {
  import AreasAndLengthsParameters = __esri.AreasAndLengthsParameters;
  export = AreasAndLengthsParameters;
}

declare module "esri/tasks/support/AttachmentQuery" {
  import AttachmentQuery = __esri.AttachmentQuery;
  export = AttachmentQuery;
}

declare module "esri/tasks/support/BufferParameters" {
  import BufferParameters = __esri.BufferParameters;
  export = BufferParameters;
}

declare module "esri/tasks/support/ClosestFacilityParameters" {
  import ClosestFacilityParameters = __esri.ClosestFacilityParameters;
  export = ClosestFacilityParameters;
}

declare module "esri/tasks/support/ClosestFacilitySolveResult" {
  import ClosestFacilitySolveResult = __esri.ClosestFacilitySolveResult;
  export = ClosestFacilitySolveResult;
}

declare module "esri/tasks/support/ColorRamp" {
  import ColorRamp = __esri.ColorRamp;
  export = ColorRamp;
}

declare module "esri/tasks/support/DataFile" {
  import DataFile = __esri.DataFile;
  export = DataFile;
}

declare module "esri/tasks/support/DataLayer" {
  import DataLayer = __esri.DataLayer;
  export = DataLayer;
}

declare module "esri/tasks/support/Date" {
  import supportDate = __esri.supportDate;
  export = supportDate;
}

declare module "esri/tasks/support/DensifyParameters" {
  import DensifyParameters = __esri.DensifyParameters;
  export = DensifyParameters;
}

declare module "esri/tasks/support/DirectionsFeatureSet" {
  import DirectionsFeatureSet = __esri.DirectionsFeatureSet;
  export = DirectionsFeatureSet;
}

declare module "esri/tasks/support/DistanceParameters" {
  import DistanceParameters = __esri.DistanceParameters;
  export = DistanceParameters;
}

declare module "esri/tasks/support/FeatureSet" {
  import FeatureSet = __esri.FeatureSet;
  export = FeatureSet;
}

declare module "esri/tasks/support/FindParameters" {
  import FindParameters = __esri.FindParameters;
  export = FindParameters;
}

declare module "esri/tasks/support/FindResult" {
  import FindResult = __esri.FindResult;
  export = FindResult;
}

declare module "esri/tasks/support/GeneralizeParameters" {
  import GeneralizeParameters = __esri.GeneralizeParameters;
  export = GeneralizeParameters;
}

declare module "esri/tasks/support/GPMessage" {
  import GPMessage = __esri.GPMessage;
  export = GPMessage;
}

declare module "esri/tasks/support/IdentifyParameters" {
  import IdentifyParameters = __esri.IdentifyParameters;
  export = IdentifyParameters;
}

declare module "esri/tasks/support/IdentifyResult" {
  import IdentifyResult = __esri.IdentifyResult;
  export = IdentifyResult;
}

declare module "esri/tasks/support/ImageServiceIdentifyParameters" {
  import ImageServiceIdentifyParameters = __esri.ImageServiceIdentifyParameters;
  export = ImageServiceIdentifyParameters;
}

declare module "esri/tasks/support/ImageServiceIdentifyResult" {
  import ImageServiceIdentifyResult = __esri.ImageServiceIdentifyResult;
  export = ImageServiceIdentifyResult;
}

declare module "esri/tasks/support/JobInfo" {
  import JobInfo = __esri.JobInfo;
  export = JobInfo;
}

declare module "esri/tasks/support/LegendLayer" {
  import LegendLayer = __esri.LegendLayer;
  export = LegendLayer;
}

declare module "esri/tasks/support/LengthsParameters" {
  import LengthsParameters = __esri.LengthsParameters;
  export = LengthsParameters;
}

declare module "esri/tasks/support/LinearUnit" {
  import LinearUnit = __esri.LinearUnit;
  export = LinearUnit;
}

declare module "esri/tasks/support/MultipartColorRamp" {
  import MultipartColorRamp = __esri.MultipartColorRamp;
  export = MultipartColorRamp;
}

declare module "esri/tasks/support/NAMessage" {
  import NAMessage = __esri.NAMessage;
  export = NAMessage;
}

declare module "esri/tasks/support/OffsetParameters" {
  import OffsetParameters = __esri.OffsetParameters;
  export = OffsetParameters;
}

declare module "esri/tasks/support/ParameterValue" {
  import ParameterValue = __esri.ParameterValue;
  export = ParameterValue;
}

declare module "esri/tasks/support/PrintParameters" {
  import PrintParameters = __esri.PrintParameters;
  export = PrintParameters;
}

declare module "esri/tasks/support/PrintTemplate" {
  import PrintTemplate = __esri.PrintTemplate;
  export = PrintTemplate;
}

declare module "esri/tasks/support/ProjectParameters" {
  import ProjectParameters = __esri.ProjectParameters;
  export = ProjectParameters;
}

declare module "esri/tasks/support/Query" {
  import Query = __esri.Query;
  export = Query;
}

declare module "esri/tasks/support/RasterData" {
  import RasterData = __esri.RasterData;
  export = RasterData;
}

declare module "esri/tasks/support/RelationParameters" {
  import RelationParameters = __esri.RelationParameters;
  export = RelationParameters;
}

declare module "esri/tasks/support/RelationshipQuery" {
  import RelationshipQuery = __esri.RelationshipQuery;
  export = RelationshipQuery;
}

declare module "esri/tasks/support/RouteParameters" {
  import RouteParameters = __esri.RouteParameters;
  export = RouteParameters;
}

declare module "esri/tasks/support/RouteResult" {
  import RouteResult = __esri.RouteResult;
  export = RouteResult;
}

declare module "esri/tasks/support/ServiceAreaParameters" {
  import ServiceAreaParameters = __esri.ServiceAreaParameters;
  export = ServiceAreaParameters;
}

declare module "esri/tasks/support/ServiceAreaSolveResult" {
  import ServiceAreaSolveResult = __esri.ServiceAreaSolveResult;
  export = ServiceAreaSolveResult;
}

declare module "esri/tasks/support/StatisticDefinition" {
  import StatisticDefinition = __esri.StatisticDefinition;
  export = StatisticDefinition;
}

declare module "esri/tasks/support/TrimExtendParameters" {
  import TrimExtendParameters = __esri.TrimExtendParameters;
  export = TrimExtendParameters;
}

declare module "esri/tasks/workflow/ConfigurationTask" {
  import ConfigurationTask = __esri.ConfigurationTask;
  export = ConfigurationTask;
}

declare module "esri/tasks/workflow/JobTask" {
  import JobTask = __esri.JobTask;
  export = JobTask;
}

declare module "esri/tasks/workflow/NotificationTask" {
  import NotificationTask = __esri.NotificationTask;
  export = NotificationTask;
}

declare module "esri/tasks/workflow/ReportTask" {
  import ReportTask = __esri.ReportTask;
  export = ReportTask;
}

declare module "esri/tasks/workflow/TokenTask" {
  import TokenTask = __esri.TokenTask;
  export = TokenTask;
}

declare module "esri/tasks/workflow/WorkflowTask" {
  import WorkflowTask = __esri.WorkflowTask;
  export = WorkflowTask;
}

declare module "esri/views/GroundView" {
  import GroundView = __esri.GroundView;
  export = GroundView;
}

declare module "esri/views/MapView" {
  import MapView = __esri.MapView;
  export = MapView;
}

declare module "esri/views/SceneView" {
  import SceneView = __esri.SceneView;
  export = SceneView;
}

declare module "esri/views/View" {
  import View = __esri.View;
  export = View;
}

declare module "esri/views/ViewAnimation" {
  import ViewAnimation = __esri.ViewAnimation;
  export = ViewAnimation;
}

declare module "esri/views/input/Input" {
  import Input = __esri.Input;
  export = Input;
}

declare module "esri/views/input/gamepad/GamepadInputDevice" {
  import GamepadInputDevice = __esri.GamepadInputDevice;
  export = GamepadInputDevice;
}

declare module "esri/views/input/gamepad/GamepadSettings" {
  import GamepadSettings = __esri.GamepadSettings;
  export = GamepadSettings;
}

declare module "esri/views/navigation/Navigation" {
  import Navigation = __esri.Navigation;
  export = Navigation;
}

declare module "esri/views/navigation/gamepad/GamepadSettings" {
  import gamepadGamepadSettings = __esri.gamepadGamepadSettings;
  export = gamepadGamepadSettings;
}

declare module "esri/views/layers/LayerView" {
  import LayerView = __esri.LayerView;
  export = LayerView;
}

declare module "esri/views/layers/CSVLayerView" {
  type CSVLayerView = __esri.CSVLayerView;
  export = CSVLayerView;
}

declare module "esri/views/layers/FeatureLayerView" {
  import FeatureLayerView = __esri.FeatureLayerView;
  export = FeatureLayerView;
}

declare module "esri/views/layers/GeoJSONLayerView" {
  type GeoJSONLayerView = __esri.GeoJSONLayerView;
  export = GeoJSONLayerView;
}

declare module "esri/views/layers/GeoRSSLayerView" {
  type GeoRSSLayerView = __esri.GeoRSSLayerView;
  export = GeoRSSLayerView;
}

declare module "esri/views/layers/GraphicsLayerView" {
  type GraphicsLayerView = __esri.GraphicsLayerView;
  export = GraphicsLayerView;
}

declare module "esri/views/layers/ImageryLayerView" {
  import ImageryLayerView = __esri.ImageryLayerView;
  export = ImageryLayerView;
}

declare module "esri/views/layers/KMLLayerView" {
  type KMLLayerView = __esri.KMLLayerView;
  export = KMLLayerView;
}

declare module "esri/views/layers/SceneLayerView" {
  type SceneLayerView = __esri.SceneLayerView;
  export = SceneLayerView;
}

declare module "esri/views/layers/StreamLayerView" {
  import StreamLayerView = __esri.StreamLayerView;
  export = StreamLayerView;
}

declare module "esri/views/layers/support/FeatureFilter" {
  import FeatureFilter = __esri.FeatureFilter;
  export = FeatureFilter;
}

declare module "esri/views/layers/support/FeatureEffect" {
  import FeatureEffect = __esri.FeatureEffect;
  export = FeatureEffect;
}

declare module "esri/views/ui/UI" {
  import UI = __esri.UI;
  export = UI;
}

declare module "esri/views/ui/DefaultUI" {
  import DefaultUI = __esri.DefaultUI;
  export = DefaultUI;
}

declare module "esri/views/2d/ViewState" {
  import ViewState = __esri.ViewState;
  export = ViewState;
}

declare module "esri/views/draw/Draw" {
  import Draw = __esri.Draw;
  export = Draw;
}

declare module "esri/views/draw/DrawAction" {
  import DrawAction = __esri.DrawAction;
  export = DrawAction;
}

declare module "esri/views/draw/PointDrawAction" {
  import PointDrawAction = __esri.PointDrawAction;
  export = PointDrawAction;
}

declare module "esri/views/draw/PolylineDrawAction" {
  import PolylineDrawAction = __esri.PolylineDrawAction;
  export = PolylineDrawAction;
}

declare module "esri/views/draw/PolygonDrawAction" {
  import PolygonDrawAction = __esri.PolygonDrawAction;
  export = PolygonDrawAction;
}

declare module "esri/views/draw/MultipointDrawAction" {
  import MultipointDrawAction = __esri.MultipointDrawAction;
  export = MultipointDrawAction;
}

declare module "esri/views/draw/SegmentDrawAction" {
  import SegmentDrawAction = __esri.SegmentDrawAction;
  export = SegmentDrawAction;
}

declare module "esri/views/2d/layers/BaseLayerView2D" {
  import BaseLayerView2D = __esri.BaseLayerView2D;
  export = BaseLayerView2D;
}

declare module "esri/views/2d/layers/BaseLayerViewGL2D" {
  import BaseLayerViewGL2D = __esri.BaseLayerViewGL2D;
  export = BaseLayerViewGL2D;
}

declare module "esri/webmap/Bookmark" {
  import Bookmark = __esri.Bookmark;
  export = Bookmark;
}

declare module "esri/webmap/InitialViewProperties" {
  import InitialViewProperties = __esri.InitialViewProperties;
  export = InitialViewProperties;
}

declare module "esri/webmap/background/ColorBackground" {
  import ColorBackground = __esri.ColorBackground;
  export = ColorBackground;
}

declare module "esri/webscene/ApplicationProperties" {
  import ApplicationProperties = __esri.ApplicationProperties;
  export = ApplicationProperties;
}

declare module "esri/webscene/Environment" {
  import Environment = __esri.Environment;
  export = Environment;
}

declare module "esri/webscene/InitialViewProperties" {
  import websceneInitialViewProperties = __esri.websceneInitialViewProperties;
  export = websceneInitialViewProperties;
}

declare module "esri/webscene/Lighting" {
  import Lighting = __esri.Lighting;
  export = Lighting;
}

declare module "esri/webscene/Presentation" {
  import Presentation = __esri.Presentation;
  export = Presentation;
}

declare module "esri/webscene/Slide" {
  import Slide = __esri.Slide;
  export = Slide;
}

declare module "esri/webdoc/applicationProperties/Search" {
  import Search = __esri.Search;
  export = Search;
}

declare module "esri/webdoc/applicationProperties/SearchLayer" {
  import SearchLayer = __esri.SearchLayer;
  export = SearchLayer;
}

declare module "esri/webdoc/applicationProperties/SearchLayerField" {
  import SearchLayerField = __esri.SearchLayerField;
  export = SearchLayerField;
}

declare module "esri/webdoc/applicationProperties/Viewing" {
  import Viewing = __esri.Viewing;
  export = Viewing;
}

declare module "esri/webscene/background/Background" {
  import Background = __esri.Background;
  export = Background;
}

declare module "esri/webscene/background/ColorBackground" {
  import backgroundColorBackground = __esri.backgroundColorBackground;
  export = backgroundColorBackground;
}

declare module "esri/widgets/AreaMeasurement2D" {
  import AreaMeasurement2D = __esri.AreaMeasurement2D;
  export = AreaMeasurement2D;
}

declare module "esri/widgets/AreaMeasurement3D" {
  import AreaMeasurement3D = __esri.AreaMeasurement3D;
  export = AreaMeasurement3D;
}

declare module "esri/widgets/Attribution" {
  import Attribution = __esri.Attribution;
  export = Attribution;
}

declare module "esri/widgets/BasemapGallery" {
  import BasemapGallery = __esri.BasemapGallery;
  export = BasemapGallery;
}

declare module "esri/widgets/BasemapToggle" {
  import BasemapToggle = __esri.BasemapToggle;
  export = BasemapToggle;
}

declare module "esri/widgets/Bookmarks" {
  import Bookmarks = __esri.Bookmarks;
  export = Bookmarks;
}

declare module "esri/widgets/CoordinateConversion" {
  import CoordinateConversion = __esri.CoordinateConversion;
  export = CoordinateConversion;
}

declare module "esri/widgets/Compass" {
  import Compass = __esri.Compass;
  export = Compass;
}

declare module "esri/widgets/Directions" {
  import Directions = __esri.Directions;
  export = Directions;
}

declare module "esri/widgets/DirectLineMeasurement3D" {
  import DirectLineMeasurement3D = __esri.DirectLineMeasurement3D;
  export = DirectLineMeasurement3D;
}

declare module "esri/widgets/DistanceMeasurement2D" {
  import DistanceMeasurement2D = __esri.DistanceMeasurement2D;
  export = DistanceMeasurement2D;
}

declare module "esri/widgets/Editor" {
  import Editor = __esri.Editor;
  export = Editor;
}

declare module "esri/widgets/Expand" {
  import Expand = __esri.Expand;
  export = Expand;
}

declare module "esri/widgets/Feature" {
  import Feature = __esri.Feature;
  export = Feature;
}

declare module "esri/widgets/FeatureForm" {
  import FeatureForm = __esri.FeatureForm;
  export = FeatureForm;
}

declare module "esri/widgets/FeatureTemplates" {
  import FeatureTemplates = __esri.FeatureTemplates;
  export = FeatureTemplates;
}

declare module "esri/widgets/Fullscreen" {
  import Fullscreen = __esri.Fullscreen;
  export = Fullscreen;
}

declare module "esri/widgets/Histogram" {
  import Histogram = __esri.Histogram;
  export = Histogram;
}

declare module "esri/widgets/HistogramRangeSlider" {
  import HistogramRangeSlider = __esri.HistogramRangeSlider;
  export = HistogramRangeSlider;
}

declare module "esri/widgets/Home" {
  import Home = __esri.Home;
  export = Home;
}

declare module "esri/widgets/LayerList" {
  import LayerList = __esri.LayerList;
  export = LayerList;
}

declare module "esri/widgets/Legend" {
  import Legend = __esri.Legend;
  export = Legend;
}

declare module "esri/widgets/Locate" {
  import Locate = __esri.Locate;
  export = Locate;
}

declare module "esri/widgets/NavigationToggle" {
  import NavigationToggle = __esri.NavigationToggle;
  export = NavigationToggle;
}

declare module "esri/widgets/Popup" {
  import Popup = __esri.Popup;
  export = Popup;
}

declare module "esri/widgets/Print" {
  import Print = __esri.Print;
  export = Print;
}

declare module "esri/widgets/ScaleBar" {
  import ScaleBar = __esri.ScaleBar;
  export = ScaleBar;
}

declare module "esri/widgets/Search" {
  import widgetsSearch = __esri.widgetsSearch;
  export = widgetsSearch;
}

declare module "esri/widgets/Sketch" {
  import Sketch = __esri.Sketch;
  export = Sketch;
}

declare module "esri/widgets/Slice" {
  import Slice = __esri.Slice;
  export = Slice;
}

declare module "esri/widgets/Slider" {
  import Slider = __esri.Slider;
  export = Slider;
}

declare module "esri/widgets/TimeSlider" {
  import TimeSlider = __esri.TimeSlider;
  export = TimeSlider;
}

declare module "esri/widgets/Track" {
  import Track = __esri.Track;
  export = Track;
}

declare module "esri/widgets/Widget" {
  import Widget = __esri.Widget;
  export = Widget;
}

declare module "esri/widgets/Zoom" {
  import Zoom = __esri.Zoom;
  export = Zoom;
}

declare module "esri/widgets/smartMapping/ClassedColorSlider" {
  import ClassedColorSlider = __esri.ClassedColorSlider;
  export = ClassedColorSlider;
}

declare module "esri/widgets/smartMapping/ClassedSizeSlider" {
  import ClassedSizeSlider = __esri.ClassedSizeSlider;
  export = ClassedSizeSlider;
}

declare module "esri/widgets/smartMapping/ColorSlider" {
  import ColorSlider = __esri.ColorSlider;
  export = ColorSlider;
}

declare module "esri/widgets/smartMapping/ColorSizeSlider" {
  import ColorSizeSlider = __esri.ColorSizeSlider;
  export = ColorSizeSlider;
}

declare module "esri/widgets/smartMapping/HeatmapSlider" {
  import HeatmapSlider = __esri.HeatmapSlider;
  export = HeatmapSlider;
}

declare module "esri/widgets/smartMapping/OpacitySlider" {
  import OpacitySlider = __esri.OpacitySlider;
  export = OpacitySlider;
}

declare module "esri/widgets/smartMapping/SizeSlider" {
  import SizeSlider = __esri.SizeSlider;
  export = SizeSlider;
}

declare module "esri/widgets/smartMapping/SmartMappingSliderBase" {
  import SmartMappingSliderBase = __esri.SmartMappingSliderBase;
  export = SmartMappingSliderBase;
}

declare module "esri/widgets/AreaMeasurement2D/AreaMeasurement2DViewModel" {
  import AreaMeasurement2DViewModel = __esri.AreaMeasurement2DViewModel;
  export = AreaMeasurement2DViewModel;
}

declare module "esri/widgets/AreaMeasurement3D/AreaMeasurement3DViewModel" {
  import AreaMeasurement3DViewModel = __esri.AreaMeasurement3DViewModel;
  export = AreaMeasurement3DViewModel;
}

declare module "esri/widgets/Attribution/AttributionViewModel" {
  import AttributionViewModel = __esri.AttributionViewModel;
  export = AttributionViewModel;
}

declare module "esri/widgets/BasemapGallery/BasemapGalleryViewModel" {
  import BasemapGalleryViewModel = __esri.BasemapGalleryViewModel;
  export = BasemapGalleryViewModel;
}

declare module "esri/widgets/BasemapGallery/support/BasemapGalleryItem" {
  import BasemapGalleryItem = __esri.BasemapGalleryItem;
  export = BasemapGalleryItem;
}

declare module "esri/widgets/BasemapGallery/support/LocalBasemapsSource" {
  import LocalBasemapsSource = __esri.LocalBasemapsSource;
  export = LocalBasemapsSource;
}

declare module "esri/widgets/BasemapGallery/support/PortalBasemapsSource" {
  import PortalBasemapsSource = __esri.PortalBasemapsSource;
  export = PortalBasemapsSource;
}

declare module "esri/widgets/BasemapToggle/BasemapToggleViewModel" {
  import BasemapToggleViewModel = __esri.BasemapToggleViewModel;
  export = BasemapToggleViewModel;
}

declare module "esri/widgets/Bookmarks/BookmarksViewModel" {
  import BookmarksViewModel = __esri.BookmarksViewModel;
  export = BookmarksViewModel;
}

declare module "esri/widgets/Compass/CompassViewModel" {
  import CompassViewModel = __esri.CompassViewModel;
  export = CompassViewModel;
}

declare module "esri/widgets/CoordinateConversion/CoordinateConversionViewModel" {
  import CoordinateConversionViewModel = __esri.CoordinateConversionViewModel;
  export = CoordinateConversionViewModel;
}

declare module "esri/widgets/Directions/DirectionsViewModel" {
  import DirectionsViewModel = __esri.DirectionsViewModel;
  export = DirectionsViewModel;
}

declare module "esri/widgets/DirectLineMeasurement3D/DirectLineMeasurement3DViewModel" {
  import DirectLineMeasurement3DViewModel = __esri.DirectLineMeasurement3DViewModel;
  export = DirectLineMeasurement3DViewModel;
}

declare module "esri/widgets/DistanceMeasurement2D/DistanceMeasurement2DViewModel" {
  import DistanceMeasurement2DViewModel = __esri.DistanceMeasurement2DViewModel;
  export = DistanceMeasurement2DViewModel;
}

declare module "esri/widgets/Editor/EditorViewModel" {
  import EditorViewModel = __esri.EditorViewModel;
  export = EditorViewModel;
}

declare module "esri/widgets/Editor/Workflow" {
  import Workflow = __esri.Workflow;
  export = Workflow;
}

declare module "esri/widgets/Expand/ExpandViewModel" {
  import ExpandViewModel = __esri.ExpandViewModel;
  export = ExpandViewModel;
}

declare module "esri/widgets/Feature/FeatureViewModel" {
  import FeatureViewModel = __esri.FeatureViewModel;
  export = FeatureViewModel;
}

declare module "esri/widgets/FeatureForm/FeatureFormViewModel" {
  import FeatureFormViewModel = __esri.FeatureFormViewModel;
  export = FeatureFormViewModel;
}

declare module "esri/widgets/FeatureForm/FieldConfig" {
  import FieldConfig = __esri.FieldConfig;
  export = FieldConfig;
}

declare module "esri/widgets/FeatureForm/FieldGroupConfig" {
  import FieldGroupConfig = __esri.FieldGroupConfig;
  export = FieldGroupConfig;
}

declare module "esri/widgets/FeatureForm/InputField" {
  import InputField = __esri.InputField;
  export = InputField;
}

declare module "esri/widgets/FeatureForm/InputFieldGroup" {
  import InputFieldGroup = __esri.InputFieldGroup;
  export = InputFieldGroup;
}

declare module "esri/widgets/FeatureTemplates/FeatureTemplatesViewModel" {
  import FeatureTemplatesViewModel = __esri.FeatureTemplatesViewModel;
  export = FeatureTemplatesViewModel;
}

declare module "esri/widgets/FeatureTemplates/TemplateItem" {
  import TemplateItem = __esri.TemplateItem;
  export = TemplateItem;
}

declare module "esri/widgets/FeatureTemplates/TemplateItemGroup" {
  import TemplateItemGroup = __esri.TemplateItemGroup;
  export = TemplateItemGroup;
}

declare module "esri/widgets/Fullscreen/FullscreenViewModel" {
  import FullscreenViewModel = __esri.FullscreenViewModel;
  export = FullscreenViewModel;
}

declare module "esri/widgets/Histogram/HistogramViewModel" {
  import HistogramViewModel = __esri.HistogramViewModel;
  export = HistogramViewModel;
}

declare module "esri/widgets/HistogramRangeSlider/HistogramRangeSliderViewModel" {
  import HistogramRangeSliderViewModel = __esri.HistogramRangeSliderViewModel;
  export = HistogramRangeSliderViewModel;
}

declare module "esri/widgets/Home/HomeViewModel" {
  import HomeViewModel = __esri.HomeViewModel;
  export = HomeViewModel;
}

declare module "esri/widgets/LayerList/LayerListViewModel" {
  import LayerListViewModel = __esri.LayerListViewModel;
  export = LayerListViewModel;
}

declare module "esri/widgets/LayerList/ListItem" {
  import ListItem = __esri.ListItem;
  export = ListItem;
}

declare module "esri/widgets/LayerList/ListItemPanel" {
  import ListItemPanel = __esri.ListItemPanel;
  export = ListItemPanel;
}

declare module "esri/widgets/Legend/LegendViewModel" {
  import LegendViewModel = __esri.LegendViewModel;
  export = LegendViewModel;
}

declare module "esri/widgets/Legend/support/ActiveLayerInfo" {
  import ActiveLayerInfo = __esri.ActiveLayerInfo;
  export = ActiveLayerInfo;
}

declare module "esri/widgets/Locate/LocateViewModel" {
  import LocateViewModel = __esri.LocateViewModel;
  export = LocateViewModel;
}

declare module "esri/widgets/NavigationToggle/NavigationToggleViewModel" {
  import NavigationToggleViewModel = __esri.NavigationToggleViewModel;
  export = NavigationToggleViewModel;
}

declare module "esri/widgets/Print/PrintViewModel" {
  import PrintViewModel = __esri.PrintViewModel;
  export = PrintViewModel;
}

declare module "esri/widgets/Print/TemplateOptions" {
  import TemplateOptions = __esri.TemplateOptions;
  export = TemplateOptions;
}

declare module "esri/widgets/Popup/PopupViewModel" {
  import PopupViewModel = __esri.PopupViewModel;
  export = PopupViewModel;
}

declare module "esri/widgets/ScaleBar/ScaleBarViewModel" {
  import ScaleBarViewModel = __esri.ScaleBarViewModel;
  export = ScaleBarViewModel;
}

declare module "esri/widgets/Search/LayerSearchSource" {
  import LayerSearchSource = __esri.LayerSearchSource;
  export = LayerSearchSource;
}

declare module "esri/widgets/Search/LocatorSearchSource" {
  import LocatorSearchSource = __esri.LocatorSearchSource;
  export = LocatorSearchSource;
}

declare module "esri/widgets/Search/SearchResultRenderer" {
  import SearchResultRenderer = __esri.SearchResultRenderer;
  export = SearchResultRenderer;
}

declare module "esri/widgets/Search/SearchSource" {
  import SearchSource = __esri.SearchSource;
  export = SearchSource;
}

declare module "esri/widgets/Search/SearchViewModel" {
  import SearchViewModel = __esri.SearchViewModel;
  export = SearchViewModel;
}

declare module "esri/widgets/Sketch/SketchViewModel" {
  import SketchViewModel = __esri.SketchViewModel;
  export = SketchViewModel;
}

declare module "esri/widgets/Slice/SliceViewModel" {
  import SliceViewModel = __esri.SliceViewModel;
  export = SliceViewModel;
}

declare module "esri/widgets/Slider/SliderViewModel" {
  import SliderViewModel = __esri.SliderViewModel;
  export = SliderViewModel;
}

declare module "esri/widgets/Spinner/SpinnerViewModel" {
  import SpinnerViewModel = __esri.SpinnerViewModel;
  export = SpinnerViewModel;
}

declare module "esri/widgets/TimeSlider/TimeSliderViewModel" {
  import TimeSliderViewModel = __esri.TimeSliderViewModel;
  export = TimeSliderViewModel;
}

declare module "esri/widgets/Track/TrackViewModel" {
  import TrackViewModel = __esri.TrackViewModel;
  export = TrackViewModel;
}

declare module "esri/widgets/Zoom/ZoomViewModel" {
  import ZoomViewModel = __esri.ZoomViewModel;
  export = ZoomViewModel;
}

declare module "esri/widgets/smartMapping/ClassedColorSlider/ClassedColorSliderViewModel" {
  import ClassedColorSliderViewModel = __esri.ClassedColorSliderViewModel;
  export = ClassedColorSliderViewModel;
}

declare module "esri/widgets/smartMapping/ClassedSizeSlider/ClassedSizeSliderViewModel" {
  import ClassedSizeSliderViewModel = __esri.ClassedSizeSliderViewModel;
  export = ClassedSizeSliderViewModel;
}

declare module "esri/widgets/smartMapping/ColorSlider/ColorSliderViewModel" {
  import ColorSliderViewModel = __esri.ColorSliderViewModel;
  export = ColorSliderViewModel;
}

declare module "esri/widgets/smartMapping/ColorSizeSlider/ColorSizeSliderViewModel" {
  import ColorSizeSliderViewModel = __esri.ColorSizeSliderViewModel;
  export = ColorSizeSliderViewModel;
}

declare module "esri/widgets/smartMapping/HeatmapSlider/HeatmapSliderViewModel" {
  import HeatmapSliderViewModel = __esri.HeatmapSliderViewModel;
  export = HeatmapSliderViewModel;
}

declare module "esri/widgets/smartMapping/OpacitySlider/OpacitySliderViewModel" {
  import OpacitySliderViewModel = __esri.OpacitySliderViewModel;
  export = OpacitySliderViewModel;
}

declare module "esri/widgets/smartMapping/SizeSlider/SizeSliderViewModel" {
  import SizeSliderViewModel = __esri.SizeSliderViewModel;
  export = SizeSliderViewModel;
}

declare module "esri/core/Evented" {
  import Evented = __esri.Evented;
  export = Evented;
}

declare module "esri/core/JSONSupport" {
  import JSONSupport = __esri.JSONSupport;
  export = JSONSupport;
}

declare module "esri/core/Loadable" {
  import Loadable = __esri.Loadable;
  export = Loadable;
}

declare module "esri/core/Promise" {
  import corePromise = __esri.corePromise;
  export = corePromise;
}

declare module "esri/layers/mixins/ArcGISCachedService" {
  import ArcGISCachedService = __esri.ArcGISCachedService;
  export = ArcGISCachedService;
}

declare module "esri/layers/mixins/ArcGISImageService" {
  import ArcGISImageService = __esri.ArcGISImageService;
  export = ArcGISImageService;
}

declare module "esri/layers/mixins/ArcGISMapService" {
  import ArcGISMapService = __esri.ArcGISMapService;
  export = ArcGISMapService;
}

declare module "esri/layers/mixins/PortalLayer" {
  import PortalLayer = __esri.PortalLayer;
  export = PortalLayer;
}

declare module "esri/layers/mixins/RefreshableLayer" {
  import RefreshableLayer = __esri.RefreshableLayer;
  export = RefreshableLayer;
}

declare module "esri/layers/mixins/ScaleRangeLayer" {
  import ScaleRangeLayer = __esri.ScaleRangeLayer;
  export = ScaleRangeLayer;
}

declare module "esri/layers/mixins/SceneService" {
  import SceneService = __esri.SceneService;
  export = SceneService;
}

declare module "esri/layers/mixins/SublayersOwner" {
  import SublayersOwner = __esri.SublayersOwner;
  export = SublayersOwner;
}

declare module "esri/layers/mixins/TemporalLayer" {
  import TemporalLayer = __esri.TemporalLayer;
  export = TemporalLayer;
}

declare module "esri/renderers/mixins/VisualVariablesRenderer" {
  import VisualVariablesRenderer = __esri.VisualVariablesRenderer;
  export = VisualVariablesRenderer;
}

declare module "esri/support/actions/ActionBase" {
  import ActionBase = __esri.ActionBase;
  export = ActionBase;
}

declare module "esri/popup/content/mixins/ChartMediaInfo" {
  import ChartMediaInfo = __esri.ChartMediaInfo;
  export = ChartMediaInfo;
}

declare module "esri/popup/content/mixins/MediaInfo" {
  import MediaInfo = __esri.MediaInfo;
  export = MediaInfo;
}

declare module "esri/support/LayersMixin" {
  import LayersMixin = __esri.LayersMixin;
  export = LayersMixin;
}

declare module "esri/views/BreakpointsOwner" {
  import BreakpointsOwner = __esri.BreakpointsOwner;
  export = BreakpointsOwner;
}

declare module "esri/views/DOMContainer" {
  import DOMContainer = __esri.DOMContainer;
  export = DOMContainer;
}

declare module "esri/views/MapViewBase" {
  import MapViewBase = __esri.MapViewBase;
  export = MapViewBase;
}

declare module "esri/widgets/Widgette" {
  import Widgette = __esri.Widgette;
  export = Widgette;
}

declare module "esri/widgets/support/GeolocationPositioning" {
  import GeolocationPositioning = __esri.GeolocationPositioning;
  export = GeolocationPositioning;
}

declare module "esri/widgets/support/GoTo" {
  import GoTo = __esri.GoTo;
  export = GoTo;
}

declare module "esri/config" {
  import config = __esri.config;
  export = config;
}

declare module "esri/geometry" {
  import geometry = __esri.geometry;
  export = geometry;
}

declare module "esri/intl" {
  import intl = __esri.intl;
  export = intl;
}

declare module "esri/kernel" {
  import kernel = __esri.kernel;
  export = kernel;
}

declare module "esri/pointCloudRenderers" {
  import pointCloudRenderers = __esri.pointCloudRenderers;
  export = pointCloudRenderers;
}

declare module "esri/renderers" {
  import renderers = __esri.renderers;
  export = renderers;
}

declare module "esri/request" {
  import request = __esri.request;
  export = request;
}

declare module "esri/symbols" {
  import symbols = __esri.symbols;
  export = symbols;
}

declare module "esri/core/lang" {
  import lang = __esri.lang;
  export = lang;
}

declare module "esri/core/promiseUtils" {
  import promiseUtils = __esri.promiseUtils;
  export = promiseUtils;
}

declare module "esri/core/requireUtils" {
  import requireUtils = __esri.requireUtils;
  export = requireUtils;
}

declare module "esri/core/scheduling" {
  import scheduling = __esri.scheduling;
  export = scheduling;
}

declare module "esri/core/urlUtils" {
  import urlUtils = __esri.urlUtils;
  export = urlUtils;
}

declare module "esri/core/watchUtils" {
  import watchUtils = __esri.watchUtils;
  export = watchUtils;
}

declare module "esri/core/workers" {
  import workers = __esri.workers;
  export = workers;
}

declare module "esri/core/accessorSupport/decorators" {
  import decorators = __esri.decorators;
  export = decorators;
}

declare module "esri/geometry/coordinateFormatter" {
  import coordinateFormatter = __esri.coordinateFormatter;
  export = coordinateFormatter;
}

declare module "esri/geometry/geometryEngine" {
  import geometryEngine = __esri.geometryEngine;
  export = geometryEngine;
}

declare module "esri/geometry/geometryEngineAsync" {
  import geometryEngineAsync = __esri.geometryEngineAsync;
  export = geometryEngineAsync;
}

declare module "esri/geometry/projection" {
  import projection = __esri.projection;
  export = projection;
}

declare module "esri/geometry/support/geodesicUtils" {
  import geodesicUtils = __esri.geodesicUtils;
  export = geodesicUtils;
}

declare module "esri/geometry/support/jsonUtils" {
  import jsonUtils = __esri.jsonUtils;
  export = jsonUtils;
}

declare module "esri/geometry/support/meshUtils" {
  import meshUtils = __esri.meshUtils;
  export = meshUtils;
}

declare module "esri/geometry/support/normalizeUtils" {
  import normalizeUtils = __esri.normalizeUtils;
  export = normalizeUtils;
}

declare module "esri/geometry/support/webMercatorUtils" {
  import webMercatorUtils = __esri.webMercatorUtils;
  export = webMercatorUtils;
}

declare module "esri/layers/support/fieldUtils" {
  import fieldUtils = __esri.fieldUtils;
  export = fieldUtils;
}

declare module "esri/renderers/smartMapping/creators/color" {
  import color = __esri.color;
  export = color;
}

declare module "esri/renderers/smartMapping/creators/dotDensity" {
  import dotDensity = __esri.dotDensity;
  export = dotDensity;
}

declare module "esri/renderers/smartMapping/creators/heatmap" {
  import heatmap = __esri.heatmap;
  export = heatmap;
}

declare module "esri/renderers/smartMapping/creators/location" {
  import location = __esri.location;
  export = location;
}

declare module "esri/renderers/smartMapping/creators/opacity" {
  import opacity = __esri.opacity;
  export = opacity;
}

declare module "esri/renderers/smartMapping/creators/predominance" {
  import predominance = __esri.predominance;
  export = predominance;
}

declare module "esri/renderers/smartMapping/creators/relationship" {
  import relationship = __esri.relationship;
  export = relationship;
}

declare module "esri/renderers/smartMapping/creators/size" {
  import size = __esri.size;
  export = size;
}

declare module "esri/renderers/smartMapping/creators/type" {
  import type = __esri.type;
  export = type;
}

declare module "esri/renderers/smartMapping/creators/univariateColorSize" {
  import univariateColorSize = __esri.univariateColorSize;
  export = univariateColorSize;
}

declare module "esri/renderers/smartMapping/heuristics/scaleRange" {
  import scaleRange = __esri.scaleRange;
  export = scaleRange;
}

declare module "esri/renderers/smartMapping/heuristics/sizeRange" {
  import sizeRange = __esri.sizeRange;
  export = sizeRange;
}

declare module "esri/renderers/smartMapping/statistics/classBreaks" {
  import classBreaks = __esri.classBreaks;
  export = classBreaks;
}

declare module "esri/renderers/smartMapping/statistics/heatmapStatistics" {
  import heatmapStatistics = __esri.heatmapStatistics;
  export = heatmapStatistics;
}

declare module "esri/renderers/smartMapping/statistics/histogram" {
  import histogram = __esri.histogram;
  export = histogram;
}

declare module "esri/renderers/smartMapping/statistics/summaryStatistics" {
  import summaryStatistics = __esri.summaryStatistics;
  export = summaryStatistics;
}

declare module "esri/renderers/smartMapping/statistics/uniqueValues" {
  import uniqueValues = __esri.uniqueValues;
  export = uniqueValues;
}

declare module "esri/renderers/smartMapping/symbology/color" {
  import symbologyColor = __esri.symbologyColor;
  export = symbologyColor;
}

declare module "esri/renderers/smartMapping/symbology/dotDensity" {
  import symbologyDotDensity = __esri.symbologyDotDensity;
  export = symbologyDotDensity;
}

declare module "esri/renderers/smartMapping/symbology/heatmap" {
  import symbologyHeatmap = __esri.symbologyHeatmap;
  export = symbologyHeatmap;
}

declare module "esri/renderers/smartMapping/symbology/location" {
  import symbologyLocation = __esri.symbologyLocation;
  export = symbologyLocation;
}

declare module "esri/renderers/smartMapping/symbology/predominance" {
  import symbologyPredominance = __esri.symbologyPredominance;
  export = symbologyPredominance;
}

declare module "esri/renderers/smartMapping/symbology/relationship" {
  import symbologyRelationship = __esri.symbologyRelationship;
  export = symbologyRelationship;
}

declare module "esri/renderers/smartMapping/symbology/size" {
  import symbologySize = __esri.symbologySize;
  export = symbologySize;
}

declare module "esri/renderers/smartMapping/symbology/type" {
  import symbologyType = __esri.symbologyType;
  export = symbologyType;
}

declare module "esri/renderers/support/jsonUtils" {
  import supportJsonUtils = __esri.supportJsonUtils;
  export = supportJsonUtils;
}

declare module "esri/popup/content" {
  import content = __esri.content;
  export = content;
}

declare module "esri/symbols/support/jsonUtils" {
  import symbolsSupportJsonUtils = __esri.symbolsSupportJsonUtils;
  export = symbolsSupportJsonUtils;
}

declare module "esri/symbols/support/symbolPreview" {
  import symbolPreview = __esri.symbolPreview;
  export = symbolPreview;
}

declare module "esri/symbols/support/symbolUtils" {
  import symbolUtils = __esri.symbolUtils;
  export = symbolUtils;
}

declare module "esri/views/3d/externalRenderers" {
  import externalRenderers = __esri.externalRenderers;
  export = externalRenderers;
}

declare module "esri/widgets/smartMapping/support/utils" {
  import utils = __esri.utils;
  export = utils;
}

declare module "esri/widgets/support/widget" {
  import widget = __esri.widget;
  export = widget;
}

declare module "esri/widgets/CoordinateConversion/support/Format" {
  import Format = __esri.Format;
  export = Format;
}

declare module "esri/widgets/CoordinateConversion/support/Conversion" {
  import Conversion = __esri.Conversion;
  export = Conversion;
}
